Encontré este artículo explicando JavaScript Quiz-Legend. De todos modos, está bien, así que quiero traerlo aquí para que todos aprendan, entiendan, recitan y critican.
Pregunta 1
(function () {return typeOf Arguments; // "Object"}) ();Los argumentos son un objeto similar a una matriz, correspondiente a la lista de parámetros de la función aprobada. Puede usar esta variable directamente en cualquier función.
El operador TypeOf solo devolverá los resultados de la cadena de tipo. Consulte la siguiente lista para saber cuál es el valor devuelto por typeof es los datos diferentes correspondientes:
De esto inferimos que los argumentos de typings son objetos
Pregunta 2
var f = function g () {return 23; }; typeof g (); // Informar un errorEsta es una expresión de función con el nombre G, y luego se asigna a la variable f.
El nombre de la función G aquí y la variable F asignada por él tienen las siguientes diferencias:
El nombre de la función G no se puede cambiar, mientras que la variable F se puede reasignar
El nombre de la función G solo se puede usar dentro del cuerpo de la función. Si intenta usar G fuera de la función, se informará un error.
Pregunta 3
(función (x) {delete x; return x; // 1}) (1);El operador Eliminar puede eliminar los atributos de un objeto, y el uso correcto es el siguiente:
Eliminar objeto.property
Eliminar objeto ['propiedad']
El operador Eliminar solo se puede usar en las propiedades del objeto y no es válido para variables y nombres de funciones. Es decir, Delete X no tiene sentido.
Será mejor que sepa que Delete no liberará la memoria directamente, simplemente interrumpe indirectamente la referencia de objetos
Pregunta 4
var y = 1, x = y = typeof x; x ;/ "indefinido"
Intentamos desglosar el código anterior en los siguientes dos pasos:
var y = 1; // Paso 1
var x = y = typeof x; // Paso 2
No debe haber objeciones al primer paso, veamos el segundo paso directamente
1. Las expresiones de asignación se ejecutan de derecha a izquierda
2. El resultado de que Y se reasignaran a typeof x, es decir, indefinido
3.x se asigna como resultado de la expresión correcta (y = typeof x), es decir, indefinido
Pregunta 5
(función f (f) {return typeOf f (); // "número"}) (function () {return 1;});Explicación del comentario directo:
(función f (f) {// El f aquí es el parámetro aprobado en function () {return 1;} // El resultado de la ejecución es naturalmente 1 return typeOf f (); // Según la tabla en la pregunta uno, sabemos que el resultado typeOf 1 es "número"}) (function () {return 1;});Pregunta 6
var foo = {bar: function () {return this.baz; }, Baz: 1}; (function () {return typeOf argumentos [0] (); // "Undefined"}) (foo.bar);Aquí puede pensar erróneamente que el resultado final es el número. Pasar parámetros a una función puede considerarse como una tarea, por lo que los argumentos [0] obtienen el valor de la función de barra real, en lugar de la referencia a foo.bar, por lo que, naturalmente, esto no apuntará a Foo, sino ventana.
Pregunta 7
var foo = {bar: function () {return this.baz; }, baz: 1} typeof (f = foo.bar) (); // "Undefinado"Este es el mismo problema que la pregunta anterior. (f = foo.bar) Devuelve el valor de la barra, no su referencia, por lo que esto no se refiere a Foo.
Pregunta 8
var f = (function f () {return '1';}, function g () {return 2;}) (); typeof f; // "número"El operador de coma evalúa cada uno de sus objetos de operación (de izquierda a derecha) y devuelve el valor del último objeto de operación.
Entonces, el valor de retorno de (función f () {return '1';}, function g () {return 2;}) es la función g, y luego ejecutarlo, entonces el resultado es 2; Finalmente typeOf 2, según la tabla en la pregunta uno, el resultado es naturalmente número
Pregunta 9
var x = 1; if (function f () {}) {x += typeof f;} x; // "1undefined"El punto clave de este problema, mencionamos en la pregunta 2, no se puede acceder al nombre de la función F en la expresión de la función fuera del cuerpo de la función.
Pregunta 10
var x = [typeof x, typeof y] [1]; typeof typeof x; // "cadena" 1. Porque la variable y no se ha declarado, typeof y devuelve "indefinido"
2. Asigne el resultado de typeOf y a x, es decir, x ahora está "indefinido"
3. Entonces typeof x es, por supuesto, "cadena"
4. El resultado final de typeof "String" es naturalmente "cadena"
Pregunta 11
(function (foo) {return typeOf foo.bar; // "Undefined"}) ({foo: {bar: 1}});Este es un truco visual puro, comentó
(function (foo) {// El foo aquí es {foo: {bar: 1}}, y no hay atributo de barra. // atributo de barra está debajo de foo.foo//so el resultado aquí es "indefinido" typeOf foo.bar;}) ({foo: {bar: 1}});Pregunta 12
(función f () {function f () {return 1;} return f (); // 2 función f () {return 2;}}) ();Las funciones declaradas a través de la declaración de función se pueden usar antes de la declaración, que llamamos a esta característica de alza. Entonces, el código anterior se explica en realidad el entorno de ejecución como este:
(función f () {function f () {return 1;} function f () {return 2;} return f ();}) ();Pregunta 13
función f () {return f; } nuevo f () instancia de f; // falsoCuando se ejecuta el código nuevo f (), se producirá el siguiente:
1. Se crea un nuevo objeto. Hereda del f.prototipo
2. El constructor F se ejecuta. Durante la ejecución, el pase correspondiente se pasará y el contexto (este) se especificará como esta nueva instancia. La nueva F es equivalente a la nueva f () y solo se puede usar en los casos en que no se pasan parámetros.
3. Si el constructor devuelve un "objeto", entonces este objeto reemplazará el resultado de todo el nuevo. Si el constructor no devuelve el objeto, el resultado de nuevo es el objeto creado en el paso 1.
PD: En circunstancias normales, el constructor no devuelve ningún valor, pero si el usuario desea sobrescribir este valor de retorno, puede optar por devolver un objeto normal para sobrescribirlo. Por supuesto, las matrices que regresan también se sobrescribirán, porque las matrices también son objetos.
Por lo tanto, el nuevo f () aquí todavía devuelve la función f en sí, no su instancia
Pregunta 14
con (función (x, indefinido) {}) longitud; // 2
La instrucción With agrega un objeto a la parte superior de la cadena de alcance. Si hay una variable que no ha utilizado un espacio de nombres en la declaración, que tiene el mismo nombre que una propiedad en la cadena de alcance, la variable apuntará al valor de la propiedad. Si hay una propiedad con el mismo nombre, se emitirá una excepción de referenceError.
Ok, ahora veamos, ya que la función (x, indefinida) {} es una expresión de función anónima, que es una función, tendrá un atributo de longitud, que se refiere al número de parámetros de la función. Entonces el resultado final es 2
Escrito al final
Algunas personas piensan que estas preguntas son complicadas, mientras que otras piensan que amplía sus horizontes y depende de sus propias opiniones. Pero una cosa es verdad. Ya sea que sea un profesional firme o no, definitivamente no irá lejos sin base teórica; nunca verá que ningún trabajador técnico calificado de repente se convierta en un experto en cohetes.
Lectura de documentos, estándares de lectura y práctica de combinación es la forma decisiva para los camaradas.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.