function globalFunc1() {
console.log(hello);
}
function globalFunc2() {
var hello = 'hello';
globalFunc1(); // expected to print "hello" but `hello` is undefined instead
}
globalFunc2();
如果不将内部变量传递给globalFunc1()
,这是否可能?
我目前正在使用以下 hack 来实现我想要的,但它太 hackish 和不优雅了。
function globalFunc2() {
var hello = 'hello';
eval('(' + globalFunc1.toString() + ')()');
}
编辑:
我实际上正在寻找 Javascript 中的一些类似于 Function.prototype.bind
、.call
或 .apply
的功能来实现我想做的事。
详细说明我在做什么:
function checker() {
if (someVar == 'some value') {
/* ... */
}
}
setTimeout(function() {
var someVar = 'some value';
/* ... */
checker();
}, 1000);
最佳答案
您可以将 globalFunc1
移动到 globalFunc2
内部,这样它就可以访问后者的内部变量,但将其分配给全局变量以允许从外部调用它:
function globalFunc2() {
window.globalFunc1 = function() {
console.log(hello);
};
var hello = 'hello';
globalFunc1(); // will print "hello"
}
globalFunc1(); // will print "hello"
这里,globalFunc1
是在 globalFunc2
内部定义的,因此可以访问其闭包中的变量,在本例中为 hello
。然而,它本身是一个全局变量,允许从外部访问它。
就您提出问题的方式而言,当(且仅当)该全局定义的(也许应该说“声明”)函数指向一个函数<时,您可以“从全局定义的函数访问函数作用域链” strong>在其他函数的范围内。
无论你做什么,都不要做你的eval
事情。您本质上在那里做的是通过词法复制来定义(然后立即执行)函数。与其这样做,为什么不直接在那里编写函数,如上所述?
关于javascript - 从全局定义的函数访问函数作用域链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26882305/