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