如何从传入的预定义回调访问外部变量
How do I get access to my outer variable from a predefined callback I pass in?
所以我有这段代码,它只是按价格或用户想要的任何内容对产品列表进行排序,它可以工作:
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()
,并尝试如何使用它们,以获得乐趣。
相关文章:
- 查询后websql成功回调无法访问变量
- 访问通过XHR.onreadystatechange回调中的XHR.send(data)发送的数据
- jQuery post,访问responseType或回调中的响应
- 在jQuery中,我如何从$.ajax回调函数访问$(this)
- 如何处理在javascript中访问数据结构的两个回调
- 如何在Typescript中的回调中访问类变量
- 如何访问ng-init或ng-checked中服务回调函数中声明的$scope变量
- 可以't从回调函数内部访问响应
- 如何在Promise回调中访问实例变量
- 如何通过回调访问nodejs中的mongodb计数结果
- 回调访问数据
- 如何从回调访问成员变量
- 从回调访问对象的属性
- 如何从传入的预定义回调访问外部变量
- 从 topic.subscribe's 回调访问小部件
- Javascript从另一个回调访问对象变量,而不将变量放在全局范围内
- 如何从WebSocket回调访问React中的组件方法
- 当使用原型方法声明从回调访问对象时,如何访问对象的其他方法
- js回调访问Angular作用域
- 从XMLHttpRequest onload回调访问全局变量