Javascript 从全局定义的函数访问函数范围链
如果不将内部变量传递给Javascript 从全局定义的函数访问函数范围链,javascript,closures,scope,Javascript,Closures,Scope,如果不将内部变量传递给globalFunc1(),这是否可能? 我目前正在使用下面的黑客来实现我想要的,但它太黑客和不雅的方式 function globalFunc1() { console.log(hello); } function globalFunc2() { var hello = 'hello'; globalFunc1(); // expected to print "hello" but `hello` is undefined instead } global
globalFunc1()
,这是否可能?
我目前正在使用下面的黑客来实现我想要的,但它太黑客和不雅的方式
function globalFunc1() {
console.log(hello);
}
function globalFunc2() {
var hello = 'hello';
globalFunc1(); // expected to print "hello" but `hello` is undefined instead
}
globalFunc2();
编辑:
实际上,我正在从Javascript中寻找一些类似于Function.prototype.bind
、.call
或.apply
的功能,以实现我想要的功能
要详细说明我在做什么:
function globalFunc2() {
var hello = 'hello';
eval('(' + globalFunc1.toString() + ')()');
}
您可以将
globalFunc1
移动到globalFunc2
内部,这样它就可以访问后者的内部变量,但可以将其分配给全局变量以允许从外部调用它:
function checker() {
if (someVar == 'some value') {
/* ... */
}
}
setTimeout(function() {
var someVar = 'some value';
/* ... */
checker();
}, 1000);
在这里,globalFunc1
是在globalFunc2
中定义的,因此可以访问其闭包中的变量,在本例中为hello
。但是,它本身是一个全局变量,允许从外部访问它
就您如何提问而言,如果(且仅当)全局定义的(也许应该说“声明的”)函数指向另一个函数范围内的函数,您可以“从全局定义的函数访问函数范围链”
无论你做什么,都不要做你的
eval
事情。实际上,您在那里做的是定义(然后立即执行)函数,方法是在中按词汇复制函数。与其这样做,为什么不在那里开始编写函数,如上所述?不,不可能为您的输入确认!由于globalFunc2
是一种回调函数,将执行多次,因此我不想多次定义同一函数(即:globalFunc1
)。不过,我暂时会采用你的方法。(问题已作相应更新)
function globalFunc2() {
window.globalFunc1 = function() {
console.log(hello);
};
var hello = 'hello';
globalFunc1(); // will print "hello"
}
globalFunc1(); // will print "hello"