使用参数返回函数的JavaScript函数

时间:2014-12-17 21:47:32

标签: javascript functional-programming

我正在nodeschool-homepage上进行函数式编程的教程。 我是JS的新手(来自Java)所以我没有得到JS的某些方面,例如:

function say(word) {
   return function(anotherWord) {
        console.log(anotherWord);
    }
}

如果我打电话:

say("hi"); // it returns nothing

say("hi", "hi"); // it returns nothing

var said = say("hi"); // asignment

said("hi"); // returns hi -- but why?

said(); // returns undefined;

有人可以向我解释外部函数中的“hi”如何在内部函数中传递?

3 个答案:

答案 0 :(得分:2)

said("hi"); // returns hi -- but why?

因为内部函数定义为

function(anotherWord) {
    console.log(anotherWord);
}

这意味着它记录了它传递的第一个参数。您正在传递'hi',因此会记录'hi'

  

如何...外部函数中的“hi”在内部函数中传递?

不是。内部函数只访问自己的参数。你传递给第一个函数的参数并不重要。 say()('hi')say('foo')('hi')都是等价的。重要的是传递给第二个函数的论点。

如果您将该功能定义为

function say(word) {
   return function(anotherWord) {
        console.log(word, anotherWord);
    }
}

现在内部函数也访问外部函数的第一个参数,因此您将获得不同的结果。

为什么这样做?因为JS中的所有函数都是closures,所以他们可以访问更高范围内的变量绑定。

答案 1 :(得分:0)

函数say返回一个带参数并记录它的函数。传递给say函数的参数(参数word)将被丢弃。

您的代码实例似乎如下:

var said = say("hi");
said("hi");

当你在这里的第一行调用say函数时,单词" hi"你传入的没有做任何事情。该函数返回另一个匿名函数,该函数存储在said变量中。

当您在said变量中调用该函数并传入" hi"时,它会按预期运行。如果第一行是

,它将以完全相同的方式工作
var said = say("elephant");

答案 2 :(得分:0)

函数say接受一个参数word,它不会在任何地方使用,所以没有任何东西从“外部”函数传递到“内部”函数。

function say(word) {
    return function(anotherWord) {
        console.log(anotherWord);
    };
}

会发生什么,say()返回一个函数。此返回的函数采用一个参数(anotherWord),在调用时输出到控制台。

现在代码示例:

say("hi"); // this returns a function, but you don't keep it anywhere

say("hi", "hi"); // still returns a function, still no variable to keep it

var said = say("hi"); // finally the returned function is saved, the param is not used

said("hi"); // this prints "hi", because you pass it 'hi'

said("foobar"); // this prints "foobar", because you pass it 'foobar'

said(); // This prints undefined, as you did not pass any parameter