Javascript:替换函数的范围对象

时间:2013-09-28 10:02:39

标签: javascript scope

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

3 个答案:

答案 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) });