You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于手动实现Array.prototype.myMap的参数传递与调用疑问

手动实现Array.prototype.myMap代码疑问解答

先贴出对应的代码:

// The global variable
const s = [23, 65, 98, 5];

Array.prototype.myMap = function(callback) {
  const newArray = [];
  
  // Only change code below this line
  for(let i = 0; i < this.length; i++){ 
    newArray.push(callback(this[i]));
  }

  // Only change code above this line
  return newArray;
};


const new_s = s.myMap(function(item) {
  return item * 2;
});

console.log(new_s);

问题1解答

  • 第4行的callback参数不是没传值,而是在第17行调用s.myMap()时,把function(item) { return item * 2; }这个函数传进去了,它就是callback。
  • callback不需要知道整个数组,它只需要处理单个元素。myMap方法内部的this,在s.myMap()调用时指向数组s——这是JavaScript方法调用的规则:用对象.方法()形式调用时,方法内部的this指向该对象。
  • 第9行里,this[i]从数组s中取出第i个元素,再把这个元素作为参数传给callback,所以callback能拿到当前要处理的数组元素。简单说,数组通过this进入myMap方法,再通过this[i]提取元素传给callback。

问题2解答

  • s.myMap是我们实现的工具方法,它的核心功能是“遍历数组,对每个元素执行你指定的操作,最后返回新数组”——这里的“指定操作”就是必须传入的callback函数。如果直接调用s.myMap()不传参数,callback会是undefined,第9行执行callback(this[i])时会报错,因为undefined无法作为函数调用。
  • 第17行的item,就是myMap方法里传给callback的this[i],也就是数组s里的每一个元素。比如第一次遍历item是23,第二次是65,这个参数名可以随便修改(比如改成num或element),它只是用来接收当前遍历到的数组元素的变量名。

内容的提问来源于stack exchange,提问作者Sheroze Mohammed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:45:38