Javascript call() 函数 - 额外参数

标签 javascript

我正在阅读 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() 函数中的ia 参数的用途是什么?如果我删除它们,我会得到相同的结果。

最佳答案

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/

相关文章:

javascript - 可以 GEO 定位 iFrame

javascript - jQuery 为什么这不起作用 $ (":input").change(function(){});

javascript - 如何在 JavaScript 中制作 IE 插件/扩展?

javascript - 在 React Apollo 查询返回后调度 Redux 操作

javascript - 如何在javascript中将div添加到弹出窗口?

javascript - 使用 if 语句并有多个成功案例

javascript - 初学者异步 JS - 每次我想要该值时是否都必须使用 "then"

javascript - 没有滚动条的 Xul 列表框,可能吗?

javascript - nodejs 的 View 引擎 Handlebar 在 Hapijs 上的 Angular 代码

javascript - 外部JS : How to hide the fourth tab of the item based on some if condition?