Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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_Closures - Fatal编程技术网

闭包仅在分配给新变量-Javascript时有效

闭包仅在分配给新变量-Javascript时有效,javascript,closures,Javascript,Closures,我已经开始学习闭包,尽管我已经开始了解闭包,但有一部分是没有意义的 在下面的代码中,当我调用原始函数时,addSomething(),当我将此函数赋给一个新变量时,计算不会发生然后它会生成所需的结果,即它进行计算并在控制台中返回6 有人能解释两件事吗: 1) 我这样做对吗 2) 为什么只在将原始函数分配给新变量时才执行计算 我觉得这部分很混乱 函数addSomething(){ 变量a=2,b=4; 函数addIt(){ var总计=a+b; 返回总数; } 返回addIt; } var al

我已经开始学习闭包,尽管我已经开始了解闭包,但有一部分是没有意义的

在下面的代码中,当我调用原始函数时,
addSomething()
,当我将此函数赋给一个新变量时,计算不会发生然后它会生成所需的结果,即它进行计算并在控制台中返回
6

有人能解释两件事吗:

1) 我这样做对吗

2) 为什么只在将原始函数分配给新变量时才执行计算

我觉得这部分很混乱

函数addSomething(){
变量a=2,b=4;
函数addIt(){
var总计=a+b;
返回总数;
}
返回addIt;
}
var all=addSomething();

log(all())这是因为如果要包装函数。第一个调用返回一个函数,第二个调用返回实际值

调用
addSomething
,返回另一个函数
addIt
。这就是为什么您需要第二个
()
,以获取
addIt
返回的值

在您的方法中,您将
addSomething
(函数addIt)的返回值存储在名为
all
的变量中
all()==addSomething()()

函数addSomething(){
变量a=2,b=4;
函数addIt(){
var总计=a+b;
返回总数;
}
返回addIt;
}

log(addSomething()())这是因为如果要包装函数。第一个调用返回一个函数,第二个调用返回实际值

调用
addSomething
,返回另一个函数
addIt
。这就是为什么您需要第二个
()
,以获取
addIt
返回的值

在您的方法中,您将
addSomething
(函数addIt)的返回值存储在名为
all
的变量中
all()==addSomething()()

函数addSomething(){
变量a=2,b=4;
函数addIt(){
var总计=a+b;
返回总数;
}
返回addIt;
}

log(addSomething()())
console.log(addSomething()())
也可以使用。。。回答你的问题:1)是2)不是?你能解释一下“当我调用原始函数时,计算没有发生”是什么意思吗?你的意思是当你单独执行
addSomething
时,你没有得到想要的结果吗?嗨@ibrahimmahrir我编辑了这个问题以使它更清楚。谢谢我想让你困惑的是你在
的末尾添加了
()
,这正是它“起作用”的原因。我希望我能用我的回答澄清你的疑问:)
console.log(addSomething())
也会起作用。。。回答你的问题:1)是2)不是?你能解释一下“当我调用原始函数时,计算没有发生”是什么意思吗?你的意思是当你单独执行
addSomething
时,你没有得到想要的结果吗?嗨@ibrahimmahrir我编辑了这个问题以使它更清楚。谢谢我想让你困惑的是你在
的末尾添加了
()
,这正是它“起作用”的原因。我希望我能用我的回答澄清你的疑问:)谢谢@CristianS。那真的很有用。令人恼火的是,有人投了反对票,但这个问题只投了赞成票。谢谢@CristianS。那真的很有用。令人恼火的是,有人否决了这个问题,只是投了赞成票。