我有一个问题,请参阅代码段,我可以看到它在某些js库中被调用。
有谁能告诉我这个片段的激动顺序是什么?在我看来,首先,编译器声明一个变量A.当来到激励时间时,它定义了一个函数 并将其赋值给变量A,但在函数体中,变量A不能在任何地方引用,因为'var A'仍未被赋予函数。
我希望我能清楚地表达我的问题。
告诉我哪里错了。
ID NAME
1 first
2 second
答案 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以及函数内部捕获的值在调用函数之前可能会发生变化的事实。