我最近在javascript中阅读函数表达式和声明,并且已经提到了很多关于此的在线文章。我也在SO上看过很多关于这个话题的讨论。在学习过程中,我挑战自己,我无法清楚地解释。 我可以请求SO专家帮助我在这里获得一些见解吗?
以下是问题情景 -
情景1:
>var multFunc=function(n){var a=2; return n*a;}
>multFunc(6)
12
我理解这种情况,结果就是我所期待的(12)。
情景2:
>var multFunc1=function(n){return function(n){n*2}}
>multFunc1(6)
function (n){n*2}
我不明白第二种情况。为什么不回12? 有人可以帮我理解这个吗? 我已检查此链接 - Javascript Function Expressions,此链接JavaScript Nested function 我昨天也问了一个类似的问题,但我想我并没有完全掌握这个概念(正如T.J所慷慨解释的那样) - Trying a closure the wrong way?
答案 0 :(得分:2)
代码:
var multFunc1=function(n){return function(n){n*2}}
返回一个函数。所以multFunc1
代表返回的函数,在这种情况下:
function(n){n*2}
所以你必须打电话给:
multFunc1(1)(2)
所以基本上返回的函数会记住n
的值(传递参数,我建议你阅读有关闭包的内容)。所以我们可以重写这些调用:
var multFunc1=function(n){return function(x){n*x}}
var multBy2 = multFunc1(2)
var multBy16 = multFunc1(16)
multBy2(4) // 8
multBy16(2) // 32
旁注:multFunc1
的内部函数没有任何return
语句,所以它始终返回undefined
,因为@nnnnnn在评论中指出
答案 1 :(得分:1)
在第二个场景中你基本上做的是返回函数Object。而不是返回函数执行的结果(通常是12),你只是返回对该对象的引用。
更新: 我想你错过了第二个函数里面的return语句。通过添加这样,这就是我相信你正在寻找的结果。
var multFunc1=function(n){
return function(n){ return n*2}
}
// The first set of () require no argument as
// they are never used withing the second function.
multFunc1()(6);