回调不同于从一个函数调用另一个函数 (JS)
Callback different from calling one function from another (JS)?
我正在学习JS,并试图理解回调。我遇到了一个链接:如何用简单的英语解释回调?它们与从一个函数调用另一个函数有何不同?在接受的答案中,使用回调的解决方案如下:
function processArray(arr, callback) {
var resultArr = new Array();
for(var i = arr.length-1; i >= 0; i--)
resultArr[i] = callback(arr[i]);
return resultArr;
}
var arr = [1, 2, 3, 4];
var arrReturned = processArray(arr, function(arg) {return arg * -1;});
alert(arrReturned);
但是,当我尝试在不使用回调的情况下做同样的事情时,如下所示,我得到了与上述相同的答案。
function processArray2(arr) {
var resultArr = new Array();
for(var i = arr.length-1; i >= 0; i--)
resultArr[i] = negate(arr[i]);
return resultArr;
}
function negate(n) {
return n*-1;
}
var arr = [1, 2, 3, 4];
var arrReturned2 = processArray2(arr);
alert(arrReturned2);
当同样的事情可以在没有回调的情况下完成时,为什么我们需要在上面的例子中使用回调。我知道我肯定错过了什么。但我似乎不明白是什么。
通常,没有严格需要使用回调。每当使用回调时,都可以直接调用函数。那是。。。只要您确切地知道该函数是什么,您就可以在源代码中引用它!
如果你可以在学习时避免回调,那对你来说可能会更容易。
也就是说,它们是JS不可或缺的一部分,随着您越来越高级,它们将成为必要部分。JS开发人员经常使用它们与浏览器进行交互。需要回调的一个主要例子是 XHR 对象(如果您从未听说过它们,请不要担心,对于它们来说,现在学习它们可能还为时过早)。
在您的问题的上下文中,回调可以用作将一个函数作为变量放入另一个函数的方式。
var array = [1, 2, 3, 4, 5];
var reduce = function (array, callback, start) {
array.forEach(function (value) {
start = callback(start, value);
});
return start;
};
function adder (prev, current) {
return prev + current;
}
var sum = reduce(array, adder, 0);
function multiplier (prev, current) {
return prev * current;
}
var product = reduce(array, multiplier, 1);
console.log(sum); // 15
console.log(product) // 120
reduce
已创建,它可以与许多功能一起使用。 (撇开可读性不谈)如果您只使用一次adder
,则可以将其作为参数放入reduce
。 如果您在应用程序中多次使用 adder
,最好将其作为var
或const
(const adder = ...
) 传递给 reduce
。
这篇文章可能会让你更好地理解函数在JS中是如何成为"一等公民"的,以及如何在你的问题之外的其他上下文中使用回调。
相关文章:
- 调用php数组中的JS函数
- 是否可以在使用headerphp函数后自动调用JS函数
- 全局窗口热键在最小化chrome窗口时调用js函数
- Angularjs从纯JS函数调用$scope.function
- JS函数调用
- 在JS函数调用后加载php函数
- Chrome 扩展程序 - 在 JS 函数调用后运行脚本
- 在 JS 函数调用链中丢失上下文
- 为什么我的onClick js函数调用每次页面加载只工作一次
- 将 href 替换为 js 函数调用
- 一次使用后销毁JS函数调用
- js函数调用,参数值来自<p: commandButton>
- 在js函数调用中嵌入一个select值
- Js函数调用帮助需要
- JS函数调用从AS3与复杂对象的参数
- 我如何测试Sinon.js函数调用的顺序
- 通过泛型JS函数调用AJAX后发生的调试PHP错误
- JS函数调用不工作
- 简单js函数调用的引用错误
- 当我的.js文件加载时,我如何执行js函数调用