【发布时间】:2017-07-12 09:07:52
【问题描述】:
词法作用域是 Javascript 中最令人困惑的主题之一,我有一种情况是我无法合理化错误,或者我应该说为什么代码不起作用。
这是一个例子:
我已经在匿名函数中记录了name 变量并且它工作正常。
function print() {
var name = 'foo bar';
printer(function(){
console.log(name)
});
}
function printer(callback) {
callback();
}
print();
结果:foo bar
但是因为我不想声明一个匿名函数。所以,我已经单独声明了。
function print() {
var name = 'foo bar';
printer(callbackHandler);
}
function callbackHandler() {
console.log(name)
}
function printer(callback) {
callback();
}
print();
结果:ReferenceError:名称未定义
谁能解释这个问题并提供解决方案?
非常感谢您的宝贵时间!!
【问题讨论】:
-
如我所见,您将范围从“print”传递到“callbackHandler”,通常该名称不存在,它只存在于“print”范围内。另一个想法是使用.bin,然后就可以用范围调用它(这不是teste,然后是apply或call)
-
词法作用域并不令人困惑。当您声明一个变量(使用 let)时,它可以在任何地方访问。 { 和 } 。太简单。如果您想在其他地方访问它,请以某种方式传递它(闭包、参数、绑定参数等)
标签: javascript