为什么console.log粘贴函数而不是值?

时间:2017-03-09 15:19:32

标签: javascript

所以我正在关注道格拉斯·克罗克福兹关于JS的讲座。他的一个练习是“编写一个接受一个参数的函数,并返回一个返回参数的函数”。接下来的问题是“编写一个从两个调用中添加的函数”。

我得到了两者的答案,我没有得到的是为什么一个人没有发布到控制台而另一个没有。这就是我的意思。这是我对第一个问题的回答:

function retFunc(x){
  return function(){
    return x;
  };
}

console.log(retFunc(4));

这会将以下内容发布到控制台:

function(){
   return x;
}

但是,如果我将其更改为此,则会将4发布到控制台(这是我想要的):

var idf = retFunc(4);
console.log(idf());

现在这是我对第二个问题的回答:

function addf(x){
  return function(y){
    return x+y;
  };
}

console.log(addf(3)(4));

这样可行,它会向控制台吐出7。我的问题是,为什么第一个不起作用?这一个呢?两者都是返回另一个函数的函数,最终返回一个值。

3 个答案:

答案 0 :(得分:3)

  

为什么第一个不起作用?

第一个确实有效,完全。你调用一个函数来返回一个函数,但你不会调用第二个函数。你改为打印它。

答案 1 :(得分:1)

不同之处在于,在第一种情况下,您没有调用返回的函数,但在第二种情况下,您是

console.log(retFunc(4));

var idf = retFunc(4);  
console.log(idf()); // <-- note the parentheses.

答案 2 :(得分:0)

而不是console.log(retFunc(4));试试console.log(retFunc(4)()); 你有两个嵌套的功能。所以你也应该打电话给内心。