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