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

时间:2016-02-05 02:12:54

标签: javascript sorting scope callback compare

所以我有这个代码只是按价格或用户想要的任何东西对产品列表进行排序,并且它有效:

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
  })
};

我作为sort函数的参数定义的sort函数回调很长,所以我想将它解耦,在别处定义它,并在我的sort函数中传递如下:

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

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

2 个答案:

答案 0 :(得分:1)

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

movie1  ACTION|ADVENTURE
movie2  ACTION|ADVENTURE|DRAMA
...

请参阅:.bind

答案 1 :(得分:-1)

从回调中调用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(),然后尝试使用这些函数,以获得乐趣。