我正在阅读 Javascript:权威指南第 6 版
。它教授 ECMAscript 5。无论如何,它没有彻底解释某些事情,例如 call() 函数。这是关于本书定义的范围:
第一个调用上下文参数之后的 call() 的任何参数都是传递给被调用函数的值。例如,要将两个数字传递给函数 f() 并像调用对象 o 的方法一样调用它,您可以使用如下代码:
f.call(o, 1, 2);
在下一节中,作者构建了一个 map
函数。我一直在研究 Ruby,所以我知道 map 是如何工作的。我的问题是关于使用 call() 函数的实现。它看起来像这样:
var map = function(a,f, o) {
var results = [];
for(var i = 0, len = a.length; i < len; i++) {
if (i in a)
results[i] = f.call(o || null, a[i], i, a);
}
return results;
};
然后它定义了一个 square 函数并使用 map:
function square(x){
return x*x;
}
var array = [1,2,3,4,5];
var results = map(array, square);
call() 函数中的i
和a
参数的用途是什么?如果我删除它们,我会得到相同的结果。
最佳答案
Array.prototype.map
is defined将索引和数组传递给回调,以备不时之需。例如,您可以使用 Math.pow(base, exponent)
而不是 square(x)
:
var results = [1, 2, 3, 4, 5].map(Math.pow);
console.log(results); // [1, 2, 9, 64, 625]
这个 map
的行为方式相同。如果在特定情况下不需要参数,则不必使用它们。
关于Javascript call() 函数 - 额外参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26227245/