Javascript 将参数传递给由名称引用的回调函数

Javascript 将参数传递给由名称引用的回调函数,javascript,jquery,Javascript,Jquery,我希望能够看到在绑定事件时可用的回调函数中的值。如果在绑定事件时定义了函数,那么在函数内部,我可以通过闭包看到值: var number = 777; $('span').click(function() { alert(number); //alerts 777 - available through closure }); 但是如果函数是在“number”变量不可用的情况下定义的,那么这个技巧就不起作用了。如果函数以这种方式绑定到事件,则函数编号\u警报程序无法看到“numbe

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

var number = 777;
$('span').click(function() { 
    alert(number); //alerts 777  - available through closure
});
但是如果函数是在“number”变量不可用的情况下定义的,那么这个技巧就不起作用了。如果函数以这种方式绑定到事件,则函数编号\u警报程序无法看到“number”变量:

$('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);
});
var my_array = [];
var case_insensitive = true;
var wrapper = function(value1, value2) {
    compare_values(value1, value2, case_insensitive)
}
array_sort(my_array, wrapper);
我的问题是,是否有其他方法将此变量传递给“数字警报”功能?也许也可以通过关闭

编辑: 这里是可能需要上述内容的真实情况。我有两个职能:

array_sort(array, compare_function)
compare_values(value1, value2, case_insensitive)
函数数组_sort只传递两个值来比较函数的_值,而使用函数数组_sort时还应传递第三个不区分大小写的参数。我知道的唯一方法是将compare_values函数包装到另一个函数中:

//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);
});
var my_array = [];
var case_insensitive = true;
var wrapper = function(value1, value2) {
    compare_values(value1, value2, case_insensitive)
}
array_sort(my_array, wrapper);

我还有别的办法吗?

你的问题一定在别的地方。就你所描述的,以下是

var number=777;
var alerter=function(){
    alert(number);
};
$("span").click(alerter);
很好用。比照 而且,是的,如果您需要访问变量的定义状态(例如,为每个跨度定义一个单击计数器),最好使用闭包

编辑:哦,我明白了

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

这不是做这件事的方法。此时必须传递函数名。

可以使用
number\u alerter
返回回调函数,并使用闭包。像这样

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

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

请参见

为什么要这样做。退一步,描述一下你试图解决的实际问题。这只是为了保存几个字符吗?@FakeRainBrigand,这主要是为了更好地理解JavaScript。好的。正如您所知,如果在实际应用程序中出现这种情况,这意味着您的代码将使大多数人感到困惑。@FakeRainBrigand,添加了实情示例如果您将函数定义在与变量“number”相同的可视范围内,这就是为什么您可以通过闭包查看变量。但我看你自己也明白了。我不理解你上次关于传递函数名的评论,因为这正是我正在做的。这当然是一种方法,谢谢!但是我需要改变number\u警报函数,这可能并不总是可能的。@Maximus:那么你需要你的
包装器
,或者一些
make\u包装器
助手函数。