Javascript 为什么调用此函数?

Javascript 为什么调用此函数?,javascript,function,Javascript,Function,为什么这个代码可以工作 但是,如果我将returninner更改为returninner() 编辑: 我提到了括号,混淆了我问题的意图。我仍然不知道如何调用内部函数,因为x()只指向外部函数 如果返回值是指向函数的指针,编译器是否知道它应该调用函数?returninner返回内部函数。这样就可以称之为 return inner()立即运行内部函数(警告0),然后返回其返回值(未定义)。然后,您会得到一个错误,undefined不是函数(当x()尝试调用它时)。当您执行返回内部()时,实际上是调用

为什么这个代码可以工作

但是,如果我将
returninner
更改为
returninner()

编辑:

我提到了括号,混淆了我问题的意图。我仍然不知道如何调用内部函数,因为x()只指向外部函数


如果返回值是指向函数的指针,编译器是否知道它应该调用函数?

returninner
返回内部函数。这样就可以称之为


return inner()
立即运行内部函数(警告
0
),然后返回其返回值(未定义)。然后,您会得到一个错误,
undefined
不是函数(当
x()
尝试调用它时)。

当您执行
返回内部()时
,实际上是调用
内部
并返回返回值,在本例中,返回值为
未定义
,因为实际上没有返回任何内容。这将导致错误,因为
undefined
不是函数(当您尝试通过执行
x()
调用它时)


当您执行
返回内部时,实际上是返回对内部函数的引用。

这是返回内容的事实

返回内部()实际调用内部函数并获得结果。将返回该结果。由于
内部
函数不显式返回任何内容,因此默认情况下它返回
未定义的
。现在
x
未定义。您不能在未定义的
x
上进行调用


返回内部实际返回对内部函数的引用。现在
x
是对函数的引用。您可以执行
x()
,它实际上会调用
内部的
闭包函数。

我想我已经破解了它;我的困惑不是太多的
returninner但它是:

var x = outer();
我现在了解到,x持有outer的返回值是因为()调用,它是对
b
的函数引用,因此如果我们现在在这个返回值周围添加另一个(),它就会调用被引用的内部函数,类似于outer()

最后一节
var x
之所以有效,是因为使用
outer()
调用了outer。然后用
x()调用内部时
让人困惑的是,这个javascript:(

编辑:

另一个妙不可言的时刻——我意识到
outer()();
不起作用,因为每次调用第一个
outer()
时,它都会创建一个新的函数上下文,并且每次在堆栈上初始化
var计数器
,当调用第二个调用时,计数器总是设置为零


x=outer()
保留以前函数调用的计数器值,因为函数上下文保存在
x
中,
var counter
只初始化了一次,所以它永远不会重置。

直到您的注释的最后一位,我仍然感到困惑;您是说编译器知道如果变量是poin,它应该自动调用吗当另一个函数遇到返回语句时,它将被调用?更新了我的答案。当你返回函数引用时,它将不会被调用。谢谢你的回答;请允许我在回答我自己的问题时,询问你是否能感觉到检查我的逻辑。我重视你的反馈,谢谢。
var x = outer();
function outer() {
    var counter = 0;
    function inner() {
        console.log(counter);
        counter++;
    }
    return inner;
}

outer()();
outer()();
outer()();

//output
0
0
0

var x = outer(); 
x();
x();
x();

//output
0
1
2