我不懂toToFn()的函数, 在我的例子中,没有具有该名称的函数,
我不明白我的例子
示例:
var fromTo = function fromTo(i,limit){
return function(){
var next = i;
if(i<limit){
i += 1;
return next;
}
return undefined;
}
}
var collect = function collect(fromToFn,array){
return function (){
var value = fromToFn();
if (value !== undefined){
array.push(value);
}
return value;
}
}
var array = [];
var col = collect(fromTo(0,2),array);
col(); //returns 0
col(); //returns 1
col(); //returns undefined
console.log(array); //returns [0,1]
&#13;
答案 0 :(得分:1)
我不理解fromToFn()函数,在我的例子中没有该名称的函数
这是真的,但没关系。函数是JavaScript中的第一类对象,对它们的引用可以在变量,属性和参数中传递。
fromToFn
是collect
函数中参数的名称:
var collect = function collect(fromToFn,array){
// ----------------------------^
因此,如果我们将函数传递给collect
,我们可以通过该参数在collect
内使用它。
代码 将函数传递到collect
,此处:
var col = collect(fromTo(0,2),array);
...因为fromTo(0, 2)
返回一个函数,然后传递给collect
。要非常清楚,因为有一些事情正在进行,传递到collect
的函数是不是 fromTo
,它是函数fromTo
返回的。该行可以写成:
var functionToPassToCollect = fromTo(0,2);
var col = collect(functionToPassToCollect,array);
这是一个更简单的示例,演示如何使用参数调用传入的函数:
function example(f) {
f();
}
function callMe() {
console.log("callMe was called");
}
example(callMe);
答案 1 :(得分:0)
当你这样做时
var col = collect(fromTo(0,2),array);
您正在调用collect
函数,并且您传递的第一个参数是fromTo(0,2)
。
fromTo
函数在被调用时返回一个函数。因此,在fromToFn
的调用中,collect
是一个函数,也可以调用:
var value = fromToFn();
fromTo
和collect
处理函数,它们被称为"higher-order" functions。这在JavaScript中是可行的,因为在JavaScript函数中是第一类值,它们可以像其他类型的值一样分配给变量(参见First-Class functions)。
在这种特定情况下,fromTo
返回的函数的一点是它可以使用fromTo
范围的变量,它被称为closure。
答案 2 :(得分:0)
fromToFn是作为参数发送到'collect'函数的函数:
function collect(fromToFn,array);
并发送fromTo函数:
collect(fromTo(0,2),array)