Q.1 Что будет на выходе приведенного ниже кода?

console.log(a);
a = 1; // a is not declared anywhere

Ответ: ReferenceError: a не определен

Q.2 Что будет на выходе приведенного ниже кода?

console.log(b);
var b = 1 ;

Ответ: не определено

Q.3 Что будет на выходе приведенного ниже кода?

console.log(‘bar:’, bar) 
bar = 15 
var foo = 1
console.log(foo, bar) var bar

Ответ:
полоса: не определено
1 15

Q.4 Что будет на выходе приведенного ниже кода?

 var foo = 5
 console.log(‘foo:’, foo)
 var foo;
 var bar = 10;
 var bar;
 console.log(‘bar:’, bar)
 var baz = 10
 var baz = 12
 console.log(‘baz:’, baz)

Ответ:
foo: 5
bar: 10
baz: 12

Q.5 Что будет на выходе приведенного ниже кода?

var a = 1;
console.log(a);
var a = 2;
console.log(a);

Ответ:
1
2

Q.6 Что будет на выходе приведенного ниже кода?

function foo() {
    function bar() {    // overridden during compilation
      return 5
    }
    return bar()
    function bar() {
      return 10
    }
  }
 console.log(foo());

Ответ: 10

Q.7 Что будет на выходе приведенного ниже кода?

function printA() {  
     console.log("Value of a after declaration", a); 
} 
console.log("Value of a before declaration: ", a);
var a = 1;
printA();    // NOTE: called after a is declared and initialised

Ответ:
Значение до объявления: undefined
Значение после объявления 1

Q.8 Что будет на выходе приведенного ниже кода?

function printA() { 
     a = 1;                    // a gets space in global scope
} 
printA();
console.log(a);               // a is accessible

Ответ: 1

Q.9 Что будет на выходе приведенного ниже кода?

function printA() { 
   var a = 1;                     // a is enclosed in function scope
} 
printA();
console.log(a);                   // a is not accessible

Ответ: ReferenceError: a не определен

Q.10 Что будет на выходе приведенного ниже кода?

function a() {
    var b = function () {
        return 3;
    };
    return b();
    var b = function () {
        return 8;
    };
}
alert(a());

Ответ: 3
Почему? => b является выражением функции и присваивается функции на этапе выполнения, прежде чем присвоить b второе значение, функция a возвращает б()

Q.11 Что будет на выходе приведенного ниже кода?

function a() {
    function b() {
        return 3;
    }
    return b();
    function b() {
        return 8;
    }
}
alert(a());

Ответ: 8
Почему? =› b — это объявление функции, которому присваивается определение на этапе компиляции, а второе определение переопределяет первое.

Q.12 Предпочтение отдается, если функция и переменная имеют одно и то же имя.

function foo() {
    var bar = "I'm a bar variable". // 2nd hoisting
    function bar() {                // function is hoisted first
        return "I'm a bar function"
    }
    return bar()
}
console.log(foo())

Ответ: TypeError: bar не является функцией
Поскольку функция dec. сначала поднимается, а затем переопределяется переменной, т.е. теперь b() дает ошибку типа

Q.13 Приоритет функциональных выражений и объявления функций

greeting()
var greeting = function () {
    console.log('Good morning')
}
greeting()
function greeting() {
    console.log('Good evening')
}
greeting()

Ответ: Добрый вечер
Доброе утро
Доброе утро

Q.14 Что будет на выходе приведенного ниже кода?

var x = 'foo';
  (function() {
    console.log('x: ' + x)
    var x = 'bar'
    console.log('x: ' + x)
  })()

Ответ:
x: не определено
x: полоса

Q.15 Что будет на выходе приведенного ниже кода?

console.log('bar:', bar);
bar = 15;
var foo = 1;
console.log("foo:", foo, "bar:", bar);
var bar;

Ответ:
bar: undefined
foo: 1 bar: 15

Q.16 Что будет на выходе приведенного ниже кода?

var v1 = 10;
(function(){
    console.log(v1);     // 10
    v1 = 20;    // it is not a declaration, declaration is hoisted
    console.log(v1);     // 20
    
})();
console.log(v1);         // 20
var v1 = 30;

Ответ: 10, 20, 20
Все ссылки на v1 относятся к одной и той же переменной, поскольку в функции v1 не объявлена, поэтому ее область действия не ограничивается функцией.

было бы иначе, если бы:

var v1 = 10;
(function(){
    console.log(v1);     // undefined
    var v1 = 20;
    console.log(v1);     // 20
    
})();
console.log(v1);         // 10
var v1 = 30;

Ответ: undefined, 20 , 10
Поскольку v1 объявлен внутри функции, он будет ограничен этой функцией и будет поднят внутри функции

Q.17 Что будет на выходе приведенного ниже кода?

var v1 = 10;
(function(){ 
    v3 = 35                      // hoisted and assigned a value
    console.log(v3)              // 35
    var v3 = 45;                 // declaration in function
    v2 = 25;                     // global variable
    console.log(v1);           // 10
    
})();
console.log(v2);                 // 25
console.log(v3);            // ReferenceError: v3 is not defined
var v1 = 30;

Ответ:
35, 10, 25, ошибка ссылки

Q.18 Что будет на выходе приведенного ниже кода?

(function () {
     try {
         throw new Error();
     } catch (x) {
         var x = 1, y = 2;
         console.log(x);
     }
     console.log(x);
     console.log(y);
 })();

Этот код после подъема выглядит так: -

(function () {
     var x, y; // outer and hoisted
     try {
         throw new Error();
     } catch (x /* inner */) {
         x = 1; // inner x, not the outer one
         y = 2; // there is only one y, which is in the outer scope         
         console.log(x /* inner */);
     }
     console.log(x);
     console.log(y);
 })();

Ответ:
1
не определено
2