Javascript 可变提升块
Javascript variable hoisting blockwise
我有两个代码块:
代码块 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',它抛出 引用错误 。如果我使用内部函数而不是 _.each,它会抛出相同的错误。我正在尝试了解变量和函数提升。如果 'A' 变量 temp 被提升到函数的顶部,为什么 'B' 或内部函数没有发生这种情况?
If for 'A' the variable temp is being hoisted to top of the function
"函数顶部"(声明在其中)
why is it not happening for 'B' or an inner function ?
因为它是在不同的函数中声明的。
Javascript 具有函数作用域,这意味着变量符号在它们声明的函数内是可见的。
参见:https://www.w3schools.com/js/js_scope.asp
所以在第二个例子中,temp 被声明在 console.log 语句的范围之外(因此引用错误)。
提升只是意味着它们在完整的函数体中可用,而不仅仅是在声明它们的行之后 (https://www.w3schools.com/js/js_hoisting.asp)
我有两个代码块:
代码块 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',它抛出 引用错误 。如果我使用内部函数而不是 _.each,它会抛出相同的错误。我正在尝试了解变量和函数提升。如果 'A' 变量 temp 被提升到函数的顶部,为什么 'B' 或内部函数没有发生这种情况?
If for 'A' the variable temp is being hoisted to top of the function
"函数顶部"(声明在其中)
why is it not happening for 'B' or an inner function ?
因为它是在不同的函数中声明的。
Javascript 具有函数作用域,这意味着变量符号在它们声明的函数内是可见的。
参见:https://www.w3schools.com/js/js_scope.asp
所以在第二个例子中,temp 被声明在 console.log 语句的范围之外(因此引用错误)。
提升只是意味着它们在完整的函数体中可用,而不仅仅是在声明它们的行之后 (https://www.w3schools.com/js/js_hoisting.asp)