Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从传入的预定义回调中访问外部变量?_Javascript_Sorting_Scope_Callback_Compare - Fatal编程技术网

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

Javascript 如何从传入的预定义回调中访问外部变量?,javascript,sorting,scope,callback,compare,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(sor

因此,我有一个代码,它只是根据价格或用户想要的任何东西对产品列表进行排序,它可以工作:

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

我需要我的compareFunc以某种方式访问传入的sortType变量,但由于作用域的原因,我希望能够访问它。有没有一种方法可以让我不必像第一个代码片段那样定义整个回调就可以访问它?

从回调调用
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()
,并尝试如何使用它们,以获得乐趣。

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

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

执行
$(product1)
是一项昂贵的操作,您可能希望将其最小化。
var sortProductsBy = function (products, sortType) {
  products.sort(compareFunc.bind(null, sortType));
}