我有两个代码块:
代码块A:
function test() {
var testBool = true;
if(!testBool) {
var temp = 10;
} else {
temp = 20;
}
console.log(temp);
}
和代码块B:
function test() {
var testBool = true;
var array = [1,2];
_.each(array, (item) => {
if(!testBool) {
var temp = 10;
} else {
temp = 20;
}
});
console.log(temp);
}
对于'A',它打印 20 ,这很好。对于'B',它会抛出引用错误。而不是 _。每个,如果我使用内部函数,它会抛出相同的错误。我想了解变量和功能提升。如果'A'变量 temp 被提升到函数的顶部,为什么不发生'B'或内部函数?
答案 0 :(得分:1)
如果对于'A',变量temp被提升到函数顶部
“函数顶部”(在其中声明)
为什么“B”或内部功能没有发生?
因为它是在不同的函数中声明的。
答案 1 :(得分:0)
Javascript具有函数作用域,这意味着变量符号在声明它们的函数中是可见的。
请参阅:https://www.w3schools.com/js/js_scope.asp
所以在第二个例子中,temp被声明在console.log语句的范围之外(因此引用错误)。
吊装只是意味着它们在完整的函数体中可用,而不仅仅是在声明它们之后(https://www.w3schools.com/js/js_hoisting.asp)