0

我希望能够看到绑定事件时可用的回调函数中的值。如果在绑定事件时定义了函数,那么在函数内部我可以通过闭包看到值:

var number = 777;
$('span').click(function() { 
    alert(number); //alerts 777  - available through closure
});

但是,如果在“数字”变量不可用时先前定义了该函数,则该技巧将不起作用。如果函数以这种方式绑定到事件,则函数 number_alerter 看不到“数字”变量:

$('span').click(number_alerter);

似乎唯一的解决方案是使用“number”参数定义函数并将“number”变量传递给函数:

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

有没有其他方法可以做到这一点?

4

2 回答 2

1

您可以使用number_alerter返回回调函数,并使用闭包。像这样

function number_alerter(num) {
    return function(){alert(num);};
}

// different scope
var number = 777;
$('span').on('click', number_alerter(number));

jsFiddle

于 2013-08-18T09:36:48.507 回答
0

你的问题必须在其他地方。根据您的描述,以下

var number=777;
var alerter=function(){
    alert(number);
};
$("span").click(alerter);

工作得很好。参照。JSFiddle而且,是的 ,如果您需要访问变量的已定义状态(例如,您为每个跨度定义一个点击计数器),最好使用闭包。

编辑:哦,我明白了

$('span').click(
    (function() {
        return number_alerter})());

这不是这样做的方法。此时您必须传递函数名称。

于 2013-08-18T09:23:44.920 回答