我想请问这怎么解释(JavaScript函数)

问题描述:

Why is the result 1? I think it might be 3.我想请问这怎么解释(JavaScript函数)

+2

请发布代码,而不是图片,这将更适合代码审查不堆栈溢出 – user7951676

+2

@ user7951676不!代码评论中的代码解释是无关紧要的。 – Mast

+2

我投票结束这个问题作为题外话题,因为它不包含有问题的代码 – Zeta

我相信这应该是因为词法作用域或函数的范围,以及静态范围的。

词法作用域说变量作用域取决于函数在何时被创建的情况下当函数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