【发布时间】:2019-10-15 08:46:48
【问题描述】:
我是 JavaScript 新手,正在尝试理解提升和作用域的概念。
案例 1
var name;
function logName(num) {
console.log(name, num);
}
logName(1);
name = "Auro";
logName(2);
我在控制台中有以下输出
Auro 1
Auro 2
如果我对hoisting 的理解正确,JS 引擎会首先提升一个变量的声明,然后自动为其分配一个值undefined。只有遇到赋值(=)操作符时,才会真正给它赋值。
如果我上面的理解是正确的,那么第一次调用logName函数时,变量name应该打印了undefined,但它打印的是值。
案例 2
var name;
function logName(num) {
console.log(name, num);
}
logName(1);
name = "Auro";
logName(2);
name = "Baner";
控制台输出:
Baner 1
Auro 2
这让我更加困惑。这里第一次调用函数logName 选择了后来对变量的赋值并打印了Baner,然而,第二次调用选择了前一个赋值,即Auro。
这里发生了什么?我错过了什么?
【问题讨论】:
-
第一个日志不输出
Auro 1 -
在这些例子中都没有我得到你声称得到的东西。
-
您是否在控制台中多次测试这些?如果你是,我猜
name从你上次运行它时仍然存在 -
这里的问题是一个错误的变量名! developer.mozilla.org/en-US/docs/Web/API/Window/name
-
@CodeManiac 是的。第一个日志不输出,只有重新运行才能输出。谢谢指出
标签: javascript function scope var hoisting