1. Prediga y explique la salida del siguiente programa JavaScript.
Javascript
function f(a, b, c) { m = ["1", "2", "3"]; a = 3; b[0] = "X"; c.first = false; } var x = 4; var y = ["A", "B", "C"]; var z = { first: true }; f(x, y, z); console.log(x, y, z); function g(a) { a = { first: true }; console.log(a); } g(z); console.log(z);
Producción:
4 ["X", "B", "C"] {first:false} {first:true} {first:false}
Explicación: cuando se registra (x, y, z), x da el valor 4 (ya que las primitivas se pasan por valor y, por lo tanto, su valor no cambia incluso después de la función f()). y es una array, por lo tanto, un objeto, por lo que se pasa por referencia y su índice 0 se cambia a X. Entonces y registra X, B, C. Dentro de la función f(), c.first se ha cambiado a falso y desde se pasa por referencia, se registra primero: falso. En la función g(), se crea un nuevo objeto con el valor verdadero, por lo que se registra primero: verdadero. Finalmente, en la última línea, z.first sigue siendo igual a false y, por lo tanto, registra first:false.
2. Prediga y explique la salida del siguiente programa JavaScript:
Javascript
function foo1() { return { bar: "hello"; }; } function foo2() { return { bar: "hello"; }; } console.log(foo1()); console.log(foo2());
Salida: {bar:»hola»} indefinido
Explicación: en foo1(), el objeto de barra se devuelve como debería y, por lo tanto, da la salida {bar: «hola»}. Pero en foo2(), la nueva línea después del retorno se interpreta de manera diferente. Implícitamente pone un punto y coma después de return y el conjunto de líneas correspondiente se trata como un bloque de declaraciones. Entonces foo2() tiene la siguiente declaración de retorno: retorno; que da salida como indefinida.
3. Prediga y explique la salida del siguiente programa JavaScript:
Javascript
(function() { console.log(1); setTimeout(function(){console.log(2)}, 1000); setTimeout(function(){console.log(3)}, 0); console.log(4); })();
Salida: 1432
Explicación: la función setTimeout() se llama solo después de que la función principal se haya ejecutado por completo y haya regresado. Entonces, aunque console.log (3) tiene un tiempo de espera de 0 milisegundos, se ejecuta solo después de que la función principal haya regresado después de registrar 1 y 4. Luego se registra 3. Finalmente, después de un tiempo de espera de 1000 milisegundos, se registra 2.
4. Prediga y explique la salida del siguiente fragmento de código JavaScript:
Javascript
for (var i = 0; i < 5; i++) { (function(x) { setTimeout(function() { console.log(x); }, 1000 ); })(i); }
Salida: 0 1 2 3 4
Explicación: con la ayuda de una expresión de función invocada inmediatamente (IIFE), se creará su propio alcance y podemos pasar i a la función. La variable i será una variable local y el valor de i en cada bucle se conservará y finalmente se imprimirá después de un tiempo de espera de 1 segundo.
5. Prediga y explique la salida del siguiente programa JavaScript:
Javascript
var x= 5; function check(){ y = 10; console.log(x); var x =10; } function check2(){ console.log(y); } check(); check2();
Salida: indefinido 10
Explicación: var x se ha definido e inicializado dentro de check() después de que se haya registrado. El levantamiento funciona solo para la declaración de variables y no para la inicialización, por lo que devuelve undefined. En check(), y se ha inicializado a 10. Dado que var no se usa, la variable tiene su alcance hasta que encuentra una variable por el nombre dado o el objeto global. Entonces, cuando se llama a check2(), registra 10 como salida.
Publicación traducida automáticamente
Artículo escrito por SAKSHIKULSHRESHTHA y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA