map是数组的方法,有一个参数,参数是一个函数,函数中有3个参数
参数1:item必须。当前元素的值
参数2:index,可选。当前元素在数组中的索引值
参数3:arr可选。当前元素属于的数组对象
那这个作为map参数的函数是怎么被调用的呢
嗯啦,前面的结题了,应该有友友来回复了,我就瞅瞅,不说话了
#include <iostream>
using namespace std;
#define ma(x) x*(x-1)
int MA(int x)
{
return x*(x-1);
}
int main()
{
int a=1, b=2;
cout<< MA(1+a+b) << endl;
cout<< ma(1+a+b) << endl;
return 0;
}
map除了第一个作为函数的参数外,还有第二个参数,指定第一个函数参数中的this值,可以省略,那么回调函数的 this 为全局对象
理解map函数参数如何调用的,看他的实现就可以,就是循环中调用,把运算的结果存到新数组中,最后返回新数组
Array.prototype.myMap = function(callback, context) {
let length = this.length
let newArry = new Array(length)
for (let index = 0; index < length; index++) {
if (this.hasOwnProperty(index)){
newArry[index] = callback.call(context, this[index], index, this)
}
}
return newArry
}
这不就像是调用了一个方法,然后方法内return了一个方法,然后找个方法内才最终return 我们需要的那个值:闭包
解释:
1.map()方法定义在JavaScript的Array中,它返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。
请注意:
map()不会对空数组进行检测
map()不会改变原始数组
2.语法:
array.map(function(currentValue, index, arr), thisIndex)
参数说明:
function(currentValue, index, arr):必须。为一个函数,数组中的每个元素都会执行这个函数。其中函数参数:
currentValue:必须。当前元素的的值。
index:可选。当前元素的索引。
arr:可选。当前元素属于的数组对象。
thisIndex:可选。对象作为该执行回调时使用,传递给函数,用作"this"的值。
3.返回由原数组中每个元素的2倍成的新数组:
item *= 2
循环中调用
map()方法定义在JavaScript的Array中,他是一个高阶函数。我们向这个函数传入我们自己定义的回调函数(callback),然后map会对数组当中每一个元素去调用回调函数。