在第一个例子中,我明确地将返回结果赋给变量并返回结果
在第二个例子中,我只是从map函数返回结果,map不会修改迭代器。
然后如何返回结果,因为结果是数组,并且它只在执行完成后打印一次到控制台。它是否在内存中创建了任何临时变量以及它如何管理?
例1:
var usr = {
usrName: 'Bob',
hobbies: ['TV', 'Radio', 'Letters'],
getLikes: function () {
var that = this;
var interests = this.hobbies.map(function(item){
return that.usrName + ' likes ' + item;
});
return interests;
}
};
console.log(usr.getLikes());

例2:
var usr2 = {
usrName: 'Bob',
hobbies: ['TV', 'Radio', 'Letters'],
getLikes: function () {
var that = this;
debugger;
return this.hobbies.map(function(item){
return that.usrName + ' likes ' + item;
});
}
};
console.log(usr2.getLikes());

答案 0 :(得分:1)
对于这两个示例,this.hobbies
保持不变,因为map
返回新数组而不修改原始数组。
对于这两个示例,当您致电usr.getLikes()
以及致电usr2.getLikes()
时,系统会返回一个数组。即使在usr
中您将map的结果分配给变量interests
,该变量只是引用一个数组,因此这两个示例是等效的,并且在第二种情况下没有中间变量。 console.log
可以安全地打印数组,这就是为什么在这两种情况下都能获得输出的原因。
以下两个示例在功能上是等效的:
var a = [1,2,3];
// same as console.log( [1,2,3] )
console.log(a);
// same as console.log(a)
console.log( [1,2,3] );

答案 1 :(得分:1)
map()函数从调用数组生成数组而不影响原始数组。
在你的第一个例子中,你已声明变量,因为你正在存储最终结果并返回该变量。
在第二个例子中,你直接返回map函数的结果而不使用额外的变量。
因此,在map()函数的所有操作中,它将输出元素存储在内存中,并且在所有迭代之后它将输出作为数组返回。
请详细了解Here
答案 2 :(得分:0)
引用documentation The map() method creates a new array with the results of calling a provided function on every element in the calling array.
答案 3 :(得分:0)
正如所说,地图会创建一个新数组,它不会将值存储在临时名副其实的中。
当你调用map时,你需要将响应返回视为一个数组并遍历响应的项目。
所以在第二种方法中:
var usr2 = {
usrName: 'Bob',
hobbies: ['TV', 'Radio', 'Letters'],
getLikes: function () {
var that = this;
debugger;
return this.hobbies.map(function(item){
return that.usrName + ' likes ' + item;
});
}
};
您必须遍历usr2.getLikes()
值。
如果你想一起看这一切:
console.log(usr2.getLikes().length);