Javascript:替换函数的作用域对象

Javascript: Replace Scope Object of Function

本文关键字:作用域 对象 函数 替换 Javascript      更新时间:2023-09-26

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

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));
}
如果需要

,您始终可以从函数中返回所需的值,例如,如果 A() 调用 B,则可以返回这些值:

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

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

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

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

您可以使用

闭包来执行此操作:

(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) });