如何从传入的预定义回调访问外部变量

How do I get access to my outer variable from a predefined callback I pass in?

本文关键字:回调 访问 外部 变量 预定义      更新时间:2023-09-26

所以我有这段代码,它只是按价格或用户想要的任何内容对产品列表进行排序,它可以工作:

var sortProductsBy = function(products, sortType){
  //sort type is a string, it could be 'price'
  products.sort(function (product1, product2) {
    var product1AttrValue  = parseInt( $(product1).attr(sortType).replace('$','') );
    var product2AttrValue  = parseInt( $(product2).attr(sortType).replace('$','') );
    if (product1AttrValue < product2AttrValue ) {
      return -1;
    }
    if (product1AttrValue > product2AttrValue) {
      return 1;
    }
    return 0;// product1 must be equal to product2
  })
};

我定义为排序函数参数的排序函数回调很长,所以我想解耦它,在其他地方定义它,以及我的排序函数中的传递,如下所示:

var sortProductsBy = function(products, sortType){
  //I need compareFunc to somehow have access to sortType
    products.sort(compareFunc)
}

我需要我的 compareFunc 以某种方式访问传入的 sortType 变量,但由于范围,我希望可以访问它。有没有办法以某种方式访问它,而不必像第一个代码片段那样定义我的整个回调?

如果您有function compareFunc (sortType, a, b) {}

var sortProductsBy = function (products, sortType) {
  products.sort(compareFunc.bind(null, sortType));
}

请参阅:.bind

从回调调用compareFunc就可以了。

function compareFunc(sortType) {
  // use sortType
}
var sortProductsBy = function(products, sortType){
  //I need compareFunc to somehow have access to sortType
  products.sort(function() {
    compareFunc(sortType);
  });
}

另外,看看 JavaScript 函数bind()call(),并尝试如何使用它们,以获得乐趣。