
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