我刚开始玩函数式编程,并试图将函数作为另一个函数的参数传递。但是我试图传递的函数也有这样的参数:
function splitStringBy(string, type, func) {
// Split string by type.
var splitArray = string.split(type);
console.log(splitArray);
// Do something with the array.
func !== undefined ? func(splitArray) : null;
}
function loopArray(array, func) {
// Loop through array.
for (var i = 0; i < array.length; i++) {
func(array[i]);
}
}
我需要将splitArray传递给我的loopArray()
以下是我试图称之为:
splitStringBy($scope.textSpace, "<br>", loopArray(splitArray, function() {
console.log('It worked!');
}));
控制台出现错误:未定义splitArray。
答案 0 :(得分:1)
不是将loopArray
作为函数传递,而是实际调用它,然后将其返回值传递给splitStringBy
。由于splitArray
在您第一次引用时未定义,因此会抛出该错误。
你想要做的是这样的事情:
function splitStringBy(string, type, func) {
// Split string by type.
var splitArray = string.split(type);
console.log(splitArray);
// Do something with the array.
func !== undefined ? func(splitArray) : null;
}
function loopArray(func) {
// Return function for looping.
return function(array) {
// Loop through array.
for (var i = 0; i < array.length; i++) {
func(array[i]);
}
}
}
splitStringBy($scope.textSpace, "<br>", loopArray(function() {
console.log('It worked!');
}));
这称为currying,其中函数将函数作为返回值传递。 loopArray
将创建一个函数,然后返回它。然后我们将新创建的函数传递给splitStringBy
,然后调用它。