很难理解javascript示例

Yap*_*ase 6 javascript

我目前正在关注javascript课程,并且在其中一个示例中遇到了解javascript中幕后发生的事情的问题(请参阅下面的代码).

我理解大部分代码并理解输出记录的原因是 - > [false,true,true].然而,有一部分让我疯了(我在底部的代码中指出了一个箭头):

我的困惑围绕参数1:

什么旅途不参数1需要从中获取与传递的时刻checkPastLimitSimplified(1)var arr5 = mapForEach(arr1, checkPastLimitSimplified(1));.

我知道在checkPastLimitSimplified(1)调用时会为此函数创建一个执行上下文,其中参数1在变量环境中.

但现在发生了什么? 函数内部的checkPastLimitSimplified函数尚未执行,只是返回.返回后会是什么样子?limiter变量在什么时候接收参数1

据我所知,.bind(this, limiter);创建了该函数的副本.它的limiter变量在返回之前是否已经为1?

function mapForEach(arr, fn) {

  var newArr = [];
  for (var i = 0; i < arr.length; i++) {
    newArr.push(
      fn(arr[i])
    )
  };

  return newArr;
}

var arr1 = [1, 2, 3];

var checkPastLimitSimplified = function(limiter) { // < ----CONFUSED
  return function(limiter, item) {
    return item > limiter;
  }.bind(this, limiter);
};

var arr5 = mapForEach(arr1, checkPastLimitSimplified(1));
console.log(arr5);
Run Code Online (Sandbox Code Playgroud)

vp_*_*rth 4

让我们重命名变量以查看关系:

var checkPastLimitSimplified = function(outer_limiter) {
  return function(limiter, item) {
    return item > limiter;
  }.bind(this, outer_limiter); 
};
Run Code Online (Sandbox Code Playgroud)

bind将函数签名修改为就function(item)在返回之前。
当客户端代码调用时checkPastLimitSimplified(1)(item),限制器将从绑定上下文中替换。