我正在研究一个解释函数式编程的教程。他要求我提供一个解决方案,它可以工作,但是他的解决方案使用该函数的.bind方法。

除语法外,我们的解决方案之间是否还有其他区别?

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,4,5];

var checkPassedLimitWithBind = function(limiter){
  return function (limiter, item) {
    return item >= limiter;
  }.bind(this, limiter);
};

var checkPassedLimitWithClosure = function(limiter){
  return function (item) {
    return item >= limiter;
  };
};

var notPassed3 = mapForEach(arr1, checkPassedLimitWithBind(3));
var doesNotPass3 = mapForEach(arr1, checkPassedLimitWithClosure(3));

alert(notPassed3);
alert(doesNotPass3);


示例也可以在这里找到:
https://jsfiddle.net/podbarron/73m86cj3/

最佳答案

绝对没有行为差异,因为该函数不使用this

否则会有所不同,是的:



var checkPassedLimitWithBind = function(limiter) {
  return function (limiter, item) {
    return this == item;
  }.bind(this, limiter);
};
var checkPassedLimitWithClosure = function(limiter) {
  return function (item) {
    return this == item;
  };
};
console.log( checkPassedLimitWithBind.call(123)(123) ); // true
console.log( checkPassedLimitWithClosure.call(123)(123) ); // false

07-26 04:41