Javascript函数表达式用例

时间:2017-02-19 04:08:52

标签: javascript

我最近在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?

2 个答案:

答案 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);
相关问题