【发布时间】:2018-02-25 07:37:43
【问题描述】:
【问题讨论】:
-
请发布代码而不是图片,这样更适合代码审查而不是堆栈溢出
-
@user7951676 不!代码解释在代码审查中是题外话。
-
我投票结束这个问题,因为它不包含有问题的代码
标签: javascript function scope
【问题讨论】:
标签: javascript function scope
我认为这应该是因为词法作用域或静态作用域以及函数作用域。
词法范围表示变量范围取决于函数的创建时间,在您创建函数 b 的情况下,num 的范围为全局。
function b() {
console.log(num)//num is scoped to its parent function it was created in
}
function a() {
var num = 3;//b will not have access to this num since it was not created here
arguments[0]();
}
num = 1;
a(test)
但如果它是动态范围,那么变量范围是基于执行顺序的,在这种情况下,num 将是调用者 a 的 num 的范围。
如果你尝试这个 sn-p 那么它会正确打印 3。
function a(cb) {
function b() {
console.log(num)
}//b is created here so it has access to num
var num = 3;
b();
}
num = 1;
a();
您可以阅读有关静态作用域和动态作用域in this question 的信息,其中更好地解释了静态与动态、函数与块作用域。
【讨论】: