我正在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”如何在内部函数中传递?
答案 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