Salida de programas de JavaScript

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *