【问题标题】:Struggling to Understand the Parameter Content when using .map on Function Expressions在函数表达式上使用 .map 时难以理解参数内容
【发布时间】:2018-01-27 09:28:09
【问题描述】:

所以我在看函数表达式。

这是我正在玩的代码:

var modifiedNames = [ "Thomas Meeks",
                      "Gregg Pollack",
                      "Christine Wong",
                      "Dan McGaw" ];

modifiedNames.map(function(cheese) {
  alert("Yo, " + cheese + "!");
});

它工作正常,但我无法理解其中的一部分。我知道.map 在做什么,但参数真的让我很吃惊。 参数如何收集数组的信息?我称它为奶酪,因为这只是我的首选测试词。

我已经阅读了一些解释,但我只是没有理解它,希望这里有人可以稍微简化一下解释。谢谢。

【问题讨论】:

    标签: javascript function function-expression


    【解决方案1】:

    您将函数传递给.map(),然后它会运行一个循环,并在每次迭代时调用该函数,并将当前项传递给它。

    这样想:

    for (var i = 0; i < array.length; i++) {
      callback(array[i]);
    }
    

    这里array是你调用.map()的数组,callback是你传入的函数。

    现在这不那么神秘了。它只是循环调用你的函数。

    当然,.map() 做的工作比这更多,传递的参数也更多,但这显示了参数是如何填充的。


    更完整的地图实现如下所示:

    Array.prototype.myMap = function(callback, thisArg) {
      var result = new Array(this.length);
    
      for (var i = 0; i < this.length; i++) {
        if (i in this) {
          result[i] = callback.call(thisArg, this[i], i, this);
        }
      }
      return result;
    };
    

    【讨论】:

    • 好吧,复杂的版本完全迷失了我 :D 但我想我是从你的 for 循环示例中得到的。所以基本上我的“奶酪”就是你的“我”,对吗? @spanky
    • @11- 是,除了i 是索引,但array[i] 传递给您的cheese。换句话说,它从array 获取索引i 并将其传递给函数的cheese 参数。
    【解决方案2】:

    您是在问这在内部是如何运作的吗?

    .map 在幕后使用 for 循环,并将数组中的每个元素传递给奶酪指针。所以奶酪会是“Thomas Meeks”,它会提醒它,然后继续。

    【讨论】:

      【解决方案3】:

      参数如何收集数组的信息?我称之为 奶酪,因为这只是我的首选测试词。

      cheese是函数命名参数,定义了函数作用域内传递的参数标识符。和

      一样
      function fn(cheese) {
        console.log(cheese)
      }
      
      fn("and crackers");
      

      或者使用.map()

      ["and crackers"].map(fn);
      

      另见Why does .then() chained to Promise.resolve() allow const declaration to be reassigned?

      【讨论】:

      • 抱歉耽搁了。你说这个函数叫什么名字?我以为这是匿名的?还是取变量名?
      • @11- cheese 是在传递给.map() 的函数中设置的参数标识符。
      猜你喜欢
      • 2020-02-21
      • 2021-12-17
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多