javascript函数体显示变量与函数变量相同

时间:2016-04-20 15:08:17

标签: javascript

我有一个问题,请参阅代码段,我可以看到它在某些js库中被调用。

有谁能告诉我这个片段的激动顺序是什么?在我看来,首先,编译器声明一个变量A.当来到激励时间时,它定义了一个函数 并将其赋值给变量A,但在函数体中,变量A不能在任何地方引用,因为'var A'仍未被赋予函数。

我希望我能清楚地表达我的问题。

告诉我哪里错了。

ID  NAME    
1   first
2   second

1 个答案:

答案 0 :(得分:2)

函数已分配给A!这正是第一行意味着什么。以下是它的实际工作原理:

var A; // Definitions are "hoisted" to the top of the scope.
A = function() {
  return A; // Return whatever value is bound to "A", this may change
            // before the function is run
};
A(); // "A" is a function, return that function
A()(); // Since the value of "A" hasn't changed, we again return that function
// Ad infinitum...

理解这一点有两个关键要素:hoisting以及函数内部捕获的值在调用函数之前可能会发生变化的事实。