0

我想知道是否可以在 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);
}
4

3 回答 3

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));
}
于 2013-09-28T10:07:53.613 回答
0

如果这是你需要的,你总是可以从函数中返回你想要的值,例如,如果 A() 调用 B,你可以返回这些值:

function B(){return var x = *;}

如果从 B 调用 A(),则可以将这些变量作为参数传递:

function B(){
$form.on("submit",A(x));
}

或者您可以为您的应用程序使用全局空间,其中所有内容都对所有人可见。如需更多信息,请发表评论,以便我解释更多。

于 2013-09-28T10:11:32.633 回答
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) });
于 2013-09-28T10:54:21.020 回答