我想知道是否有可能在javascript中替换函数的范围对象。我有一个非常复杂的事件处理程序,我想把它从另一个函数中拉出来并存储在其他地方。然后,我希望能够检索处理程序,替换其范围,并将其作为处理程序传递。
示例代码:
function A(event){
}
function B(){
// many variables initialized here that I want to be available from within A...
// the line where I would like to bind these variables to A
$form.on("submit", A);
}
答案 0 :(得分:2)
JavaScript具有词法范围,因此,它无法提供您想要的内容,即从使用函数的位置提供变量。但您可以使用以下代码解决它:
function A(a,b,c){
return function(event) {
/* a, b, c are now available in handler */
alert(a+b+c);
};
}
function B(){
// here you define a, b, c
var a = 1, b = 2, c = 3;
$form.on("submit", A(a,b,c));
}
答案 1 :(得分:0)
如果这是你需要的,你总是可以从函数中返回你想要的值,例如,如果A()调用B,你可以返回这些值:
function B(){return var x = *;}
如果从B调用A(),则可以将这些变量作为参数传递:
function B(){
$form.on("submit",A(x));
}
或者您可以为您的应用使用全局空间,让所有人都可以看到所有内容。 如有任何更多信息请发表评论,以便我可以解释更多。
答案 2 :(得分:0)
您可以使用闭包执行此操作:
(function() {
// declare variables here
var variable;
function A(event){
// use them here
alert(variable);
}
function B(){
// initialize them here
variable = 'something';
$form.on("submit", A);
}
B();
})();
或者像这样:
$form.on("submit", function() { A(var1, var2, var3) });