Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数返回函数和无引用_Javascript_Function - Fatal编程技术网

Javascript 函数返回函数和无引用

Javascript 函数返回函数和无引用,javascript,function,Javascript,Function,我的问题是关于这个功能: 函数d(){ 函数e(){ 警报(‘E’); } 返回e; } d()()//警告“E”对d的调用(在最后一行中是d())返回E,然后最后一个()立即调用该函数 考虑 function n() { return 5; } console.log(n() + 1); // 6 调用n(),返回值不存在任何内容,但返回值可用于加法操作。调用d()的返回值同样可以用作函数调用表达式中函数的引用,这正是代码中发生的情况 换句话说,d()返回对函数的引用(e)。为了调用一个

我的问题是关于这个功能:

函数d(){
函数e(){
警报(‘E’);
}
返回e;
}
d()()//警告“E”
对d的调用(在最后一行中是
d()
)返回
E
,然后最后一个
()
立即调用该函数

考虑

function n() { return 5; }

console.log(n() + 1); // 6
调用
n()
,返回值不存在任何内容,但返回值可用于加法操作。调用
d()
的返回值同样可以用作函数调用表达式中函数的引用,这正是代码中发生的情况


换句话说,
d()
返回对函数的引用(
e
)。为了调用一个函数,您只需要从某处获取一个函数的引用和一个括号内的参数列表。这就是
d()()
所提供的功能。

使用函数不需要对函数进行命名引用。您可以对任何表达式的结果应用运算符,而
()
函数调用只是另一个运算符

因此,它与对函数调用的结果执行加法没有什么不同

函数returnTwo(){
返回2;
}
console.log(returnTwo()+40)
它不需要引用,因为它被显式转换为返回值。除非存储,否则JavaScript表达式的结果(一系列解释变量、函数和/或返回值的操作)将被完全计算,然后从内存中删除。关键是必须对其进行
全面评估
。你几乎可以把函数执行想象成水平的俄罗斯嵌套玩偶。JavaScript表达式为:

d()();
所以它从左到右开始:

d()
执行并返回:

function e() { ... }
//nothing
这将线路变成:

function e() { ... }()
然后执行、发出警报并返回:

function e() { ... }
//nothing

完整表达式已完成。没有什么事可做了。引用不会存储在任何地方,解析此表达式后,从其求值返回的所有内容都会立即被丢弃

“一个更基本的例子是生活。”塔普拉肯定;我只是觉得简单的算术可能更容易理解,是的,不会让人分心。想想其他常见的例子,在汇编(低级编程)中有一个所谓的“累加器”寄存器,它是处理器内部的一个非常特殊的寄存器,存储每个操作的输入和输出。例如,要进行加法,您需要将一个值加载到累加器中,再将另一个值添加到累加器中,然后从累加器中加载结果。今天的编程语言仍然受此影响。