javascript - 在另一个范围内运行函数

标签 javascript function object scope

我试图避免自己在 if 中出现很长的代码块。声明,所以我试图在当前范围内调用另一个函数:

var f = function(){ alert(a); };

(function(){
    var a = "abc.";
    f(); //undefined
    eval("("+f+")()"); //this works, but eval is evil
})();

我可能遗漏了有关范围的一些非常基本的东西,甚至遗漏了其他(更好的)方法来处理整个事情,但我无法弄清楚它是什么。关于如何做到这一点的任何想法?我不想通过函数参数传递我需要的变量。

提前致谢!

最佳答案

如果您不想将所需的变量作为参数传递,则需要确保您调用的函数与定义这些变量的范围相同(或更低)。

所以在你的情况下,如果你带var f = ...括号中的立即执行函数中的定义将与变量a在同一范围内.我不确定这与 if 的匹配度如何。您提到但未包含在代码示例中的语句,但您可以执行以下操作:

(function(){
  var f = function(){ alert(a); };

  // other code here if you have any
  var a;

  if ("your if condition" == "something") {
    a = "abc.";
    f();
  }
})();

或者只是声明a在同一个地方声明f .

关于javascript - 在另一个范围内运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7343243/

相关文章:

javascript - 使用 JavaScript 计时元素 fade_in

c++ - 菱形继承(钻石问题)和纯虚函数

c++ - 函数签名,调用和定义的顺序

c++ - 指向失去值(value)的对象的 vector 的指针

javascript - 组合两个数组以形成 JavaScript 对象

javascript - 在javascript中,如何将字符串数组转换为对象数组?

javascript - 如何将 "/b"放入正则表达式对象中?

php - 页面加载时如何转到 history.back()?

javascript - 当 props 改变时,React hooks 不会重新渲染组件

list - Haskell:将函数映射到列表列表