我想请问这怎么解释(JavaScript函数)
答
我相信这应该是因为词法作用域或函数的范围,以及静态范围的。
词法作用域说变量作用域取决于函数在何时被创建的情况下当函数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本来范围呼叫者一个的顺序是 NUM。
,如果你试试这个片断,然后它会正确打印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();
你可以阅读有关静态范围并在静态类型vs动态,功能VS块范围解释的更好的动态范围界定in this question。
请发布代码,而不是图片,这将更适合代码审查不堆栈溢出 – user7951676
@ user7951676不!代码评论中的代码解释是无关紧要的。 – Mast
我投票结束这个问题作为题外话题,因为它不包含有问题的代码 – Zeta