map函数是否将返回值存储在临时变量

时间:2017-11-19 05:20:16

标签: javascript

在第一个例子中,我明确地将返回结果赋给变量并返回结果

在第二个例子中,我只是从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());




4 个答案:

答案 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);