【发布时间】:2020-02-07 06:55:15
【问题描述】:
对于一个函数,它是在声明期间还是在运行时之前获得变量范围?
我尝试了下面的第一部分代码,但它不起作用。第二部分有效。有人可以对差异有所了解吗?
//// does not work
function a() {
console.log(v1);
}
function b() {
let v1 = 1;
a();
}
b();
//// does work
function a() {
console.log(v1);
}
function b() {
a();
}
let v1 = 1;
b();
【问题讨论】:
-
词法范围在声明时设置,我们称之为闭包。如果你在第一种情况下声明 b 的内部,它会正常工作。
-
这是动态与静态(词法)作用域的示例。解释见stackoverflow.com/a/22395580/989121。
标签: javascript variables scope