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

javascript函数体显示与函数变量相同的变量,javascript,Javascript,我有一个问题,请看代码片段,我可以看到它在一些js库中被调用 谁能告诉我这个片段的执行顺序是什么?在我看来,首先,编译器声明了一个变量a。当涉及到执行时间时,它定义了一个函数 并将其赋给变量A,但在函数体中,变量A不能在任何地方引用,因为“var A”仍然没有被赋给函数 我希望我已经清楚地表达了我的问题 告诉我哪里错了 var A= function(){reutrn A;} console.log(A()()().....) /*no mater how many '()

我有一个问题,请看代码片段,我可以看到它在一些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...
要理解这一点,有两个关键要素:函数内部捕获的值在调用函数之前可能会发生变化。

但函数被分配给
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...

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

函数内部对
a
的引用将是函数外部声明的
var
。除此之外,还不清楚您在问什么。函数
A
的可能重复项返回调用变量
A
时分配给它的任何内容(顺便说一句,也是一样)。@Bergi,我不认为so@johnny_trs这似乎可以解释你的误解但是在函数体中,变量A不能引用任何地方“,不是吗?函数内部对
A
的引用将是函数外部声明的
var
。除此之外,还不清楚您在问什么。函数
A
的可能重复项返回调用变量
A
时分配给它的任何内容(顺便说一句,也是一样)。@Bergi,我不认为so@johnny_trs这似乎可以解释你的误解“但在函数体中,变量A不能引用任何地方”,不是吗?