闭包仅在分配给新变量-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。那真的很有用。令人恼火的是,有人否决了这个问题,只是投了赞成票。