我试图阻止自己在if
语句中使用非常长的代码块,所以我试图将另一个函数调用到当前范围内:
var f = function(){ alert(a); };
(function(){
var a = "abc.";
f(); //undefined
eval("("+f+")()"); //this works, but eval is evil
})();
我可能遗漏了一些非常基本的关于范围,甚至其他(更好)的方法来处理整个事情,但我无法弄清楚它是什么。关于如何做到这一点的任何想法?我不想通过函数参数传递我需要的变量。
提前致谢!
答案 0 :(得分:1)
如果您不想将所需的变量作为参数传递,则需要确保您调用的函数与定义这些变量的范围相同(或更低)。
因此,在您的情况下,如果将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
。
答案 1 :(得分:0)
您需要确保将要提醒的变量传递给函数
var f = function(a){ alert(a); };
(function(){
var a = "abc.";
f(a); //passing it the reference to a
})();
编辑:好吧,如果你真的不想传递变量。您需要先在全局范围内设置a
。在函数中使用var
时,您将创建一个该函数的本地变量。保留var,你只是更新它的全局版本。
var f = function(){ alert(a); };
var a = ""; // declare a in global scope
(function(){
a = "abc."; // dont use var, we just update the global scope.
f(); // F runs and grabs a from global scope
})();
答案 2 :(得分:-1)
惊讶没人说这个。这就是我要做的事情
function sayhi () {
alert("hi " + this.a);
}
(function () {
this.a = "foo";
sayhi.call(this);
}());