我有一个问题,请查看代码片段,我可以看到它在一些js库中被调用。
谁能告诉我这段代码的执行顺序是什么?在我看来,首先,编译器声明了一个变量A。当执行时,它定义了一个函数 并将其赋值给变量 A ,但在函数体中,变量 A 无法在任何地方引用,因为 'var A' 仍未被赋值给函数。
我希望我已经清楚地表达了我的问题。
请告诉我哪里错了。
var A= function(){reutrn A;}
console.log(A()()().....) /*no mater how many '()'s,it still returns the "function (){return A }" */
最佳答案
但是函数被分配给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事实上,在调用函数之前,函数内部捕获的值可能会发生变化。
关于javascript函数体显示的变量与函数变量相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36747996/