Me deparei com este artigo explicando o JavaScript Quiz-Legend. De qualquer forma, está tudo bem, então eu quero trazê -lo aqui para que todos aprendam, entendam, recitem e critiquem.
Pergunta 1
(function () {return typeof argumentos; // "object"}) ();Os argumentos são um objeto semelhante a uma matriz, correspondente à lista de parâmetros da função passada. Você pode usar essa variável diretamente em qualquer função.
O operador TIPOOF retornará apenas os resultados da string de tipo. Consulte a lista a seguir para saber qual o valor retornado pelo tipoof são os dados diferentes correspondentes:
A partir disso, inferimos que os tipos de argumentos são objetos
Pergunta 2
var f = função g () {return 23; }; typeof g (); // relate um erroEsta é uma expressão de função com o nome G e, em seguida, é atribuída à variável f.
O nome da função G aqui e a variável f atribuída por ela têm as seguintes diferenças:
O nome da função G não pode ser alterado, enquanto a variável f pode ser transferida
O nome da função G só pode ser usado dentro do corpo da função. Se você tentar usar g fora da função, será relatado um erro.
Pergunta 3
(function (x) {excluir x; retornar x; // 1}) (1);O operador de exclusão pode excluir atributos de um objeto, e o uso correto é o seguinte:
exclua object.property
Excluir objeto ['propriedade']
O operador de exclusão só pode ser usado nas propriedades do objeto e é inválido para variáveis e nomes de funções. Ou seja, excluir X não tem sentido.
É melhor você saber que excluirá a memória diretamente, ela apenas interrompe indiretamente a referência do objeto
Pergunta 4
var y = 1, x = y = tipo de x; x; // "indefinido"
Tentamos dividir o código acima nas duas etapas a seguir:
var y = 1; // Etapa 1
var x = y = tipo de x; // Etapa 2
Não deve haver objeção ao primeiro passo, vejamos o segundo passo diretamente
1. Expressões de atribuição são executadas da direita para a esquerda
2. O resultado de Y ser transferido para o tipo de x, ou seja, indefinido
3.x é atribuído como resultado da expressão certa (y = tipo de x), ou seja, indefinido
Pergunta 5
(função f (f) {return typeof f (); // "número"}) (function () {return 1;});Comentário direto Explicação:
(Função f (f) {// O F Aqui está o parâmetro passado em function () {return 1;} // O resultado da execução é naturalmente 1 tipo de retorno de f (); // SO de acordo com a tabela em questão um, sabemos que o tipo de 1 resultado é "número"}) (function () {Return 1;});Pergunta 6
var foo = {bar: function () {return this.baz; }, baz: 1}; (function () {return typeof argumentos [0] (); // "indefinido"}) (foo.bar);Aqui você pode achar erroneamente que o resultado final é o número. A passagem dos parâmetros para uma função pode ser considerada uma atribuição, portanto, os argumentos [0] obtêm o valor da função de barra real, em vez da referência ao foo.bar, então, naturalmente, isso não apontará para foo, mas janela.
Pergunta 7
var foo = {bar: function () {return this.baz; }, baz: 1} typeof (f = foo.bar) (); // "indefinido"Este é o mesmo problema da pergunta anterior. (f = foo.bar) retorna o valor da barra, não sua referência, portanto isso não se refere ao foo.
Pergunta 8
var f = (função f () {return '1';}, função g () {return 2;}) (); tipo de f; // "número"O operador de vírgula avalia cada um de seus objetos de operação (da esquerda para a direita) e retorna o valor do último objeto de operação.
Portanto, o valor de retorno de (função f () {return '1';}, função g () {return 2;}) é a função g e, em seguida, execute -o, então o resultado é 2; Finalmente, o tipo de 2, de acordo com a tabela na pergunta um, o resultado é naturalmente número
Pergunta 9
var x = 1; if (função f () {}) {x += typeof f;} x; // "1ndefined"O ponto -chave desse problema, mencionamos na pergunta 2, o nome da função f na expressão da função não pode ser acessado fora do corpo da função.
Pergunta 10
var x = [tipo de x, tipo de y] [1]; tipo de tipo de x; // "string" 1. Como a variável y não foi declarada, o tipo de retorna "indefinido"
2. Atribua o resultado do tipo de y a x, ou seja, x agora é "indefinido"
3. Então o tipo de x é obviamente "string"
4. O resultado final do tipo de "string" é naturalmente ainda "string"
Pergunta 11
(function (foo) {return typeof foo.bar; // "indefinido"}) ({foo: {bar: 1}});Este é um truque visual puro, comentado
(function (foo) {// O foo aqui é {foo: {bar: 1}}, e não há atributo de barra. // o atributo de barra está abaixo do foo.foo//So o resultado aqui é "indefinido", devolver o tipo de foo.bar;}) ({foo: {bar: 1}});Pergunta 12
(função f () {função f () {return 1;} return f (); // função 2 f () {return 2;}}) ();As funções declaradas através da declaração de função podem até ser usadas antes da declaração, que chamamos de elevação. Portanto, o código acima é realmente explicado pelo ambiente de corrida como este:
(função f () {função f () {return 1;} função f () {return 2;} return f ();}) ();Pergunta 13
função f () {return f; } new f () instância de f; // falseQuando o código novo f () é executado, o seguinte acontecerá:
1. Um novo objeto é criado. Herda do F.Prototype
2. O construtor F é executado. Durante a execução, o passe correspondente será passado, e o contexto (isso) será especificado como esta nova instância. O novo F é equivalente a novos f () e só pode ser usado nos casos em que nenhum parâmetros é passado.
3. Se o construtor retornar um "objeto", esse objeto substituirá o resultado de todo o novo. Se o construtor não retornar o objeto, o resultado do novo é o objeto criado na etapa 1.
PS: Em circunstâncias normais, o construtor não retorna nenhum valor, mas se o usuário quiser substituir esse valor de retorno, ele poderá optar por retornar um objeto normal para substituí -lo. Obviamente, as matrizes devolver também serão substituídas, porque as matrizes também são objetos.
Portanto, o novo f () aqui ainda retornamos a função f em si, não sua instância
Pergunta 14
com (função (x, indefinido) {}) comprimento; // 2
A declaração com adiciona um objeto à parte superior da cadeia de escopo. Se houver uma variável que não tenha usado um espaço para nome na instrução, que tem o mesmo nome que uma propriedade na cadeia de escopo, a variável apontará para o valor da propriedade. Se houver uma propriedade com o mesmo nome, será emitida uma exceção do ReferenceError.
OK, agora vamos olhar para ele, já que a função (x, indefinida) {} é uma expressão de função anônima, que é uma função, ele terá um atributo de comprimento, que se refere ao número de parâmetros da função. Portanto, o resultado final é 2
Escrito no final
Algumas pessoas pensam que essas perguntas são complicadas, enquanto outras pensam que isso amplia seus horizontes e depende de suas próprias opiniões. Mas uma coisa é verdadeira. Se você é um profissional firme ou não, definitivamente não irá longe sem a base teórica - nunca verá nenhum trabalhador técnico qualificado se tornando de repente um especialista em foguetes.
Ler documentos, ler padrões e combinar a prática é a maneira decisiva de camaradas.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.