我希望能够看到绑定事件时可用的回调函数内部的值。如果在绑定事件时定义了函数,那么在函数内部我可以通过闭包看到值:
var number = 777;
$('span').click(function() {
alert(number); //alerts 777 - available through closure
});
但是如果先前在'number'变量不可用时定义了该函数,则该技巧将不起作用。如果函数以这种方式绑定到事件,则函数number_alerter无法看到'number'变量:
$('span').click(number_alerter);
似乎唯一的解决方案是使用'number'参数定义函数并将'number'varible传递给函数:
//function defined somewhere earlier
function number_alerter(e, number) {
alert(number);
}
...
//current scope
var number = 777;
$('span').on('click', function(e) {
return number_alerter(e, number);
});
我的问题是,是否有另一种方法可以将此变量传递给'number_alerter'函数?也许通过关闭也可以吗?
编辑: 以下是可能需要上述情况的真实情况。我有两个功能:
array_sort(array, compare_function)
compare_values(value1, value2, case_insensitive)
函数array_sort只传递compare_values函数两个值,而使用函数array_sort时也应该传递第三个不区分大小写的参数。我知道如何做的唯一方法是将compare_values函数包装到另一个函数中:
var my_array = [];
var case_insensitive = true;
var wrapper = function(value1, value2) {
compare_values(value1, value2, case_insensitive)
}
array_sort(my_array, wrapper);
我还有其他办法吗?
答案 0 :(得分:1)
您可以使用number_alerter
返回回调函数,并使用闭包。喜欢这个
function number_alerter(num) {
return function(){alert(num);};
}
// different scope
var number = 777;
$('span').on('click', number_alerter(number));
请参阅jsFiddle
答案 1 :(得分:0)
你的问题必须在别的地方。据您所述,以下
var number=777;
var alerter=function(){
alert(number);
};
$("span").click(alerter);
工作得很好。参看JSFiddle 并且,是的,如果您需要访问已定义的状态(例如,为每个跨度定义一个点击计数器),那么使用闭包就可以完成它。
编辑:哦,我明白了
$('span').click(
(function() {
return number_alerter})());
这不是这样做的方法。你必须在此时传递函数名称。