考虑代码:
function foo()
{
console.log('foo');
}
function bar()
{
var foo = 5;
foo(); // (*)
}
如何使(*)
引用外部函数而不是局部变量?
答案 0 :(得分:1)
如果外部范围是全局范围,则可以执行
window.foo(); // assuming you're in a browser
如果没有,那么你运气不好。给局部变量另一个名字。
您运气不好的一个例子:
window.onload = function() {
function foo()
{
console.log('foo');
}
function bar()
{
var foo = 5;
foo(); // (*)
}
}
匿名"加载"的范围处理函数没有名称,也没有任何其他句柄来实现代码的功能" bar"可能表明它想要引用 " foo"而不是当地的。
请注意,Coffeescript明确禁止这一点;它不会允许本地符号隐藏更全局的符号。 (在你跳上Coffeescript火车之前,那是controversial feature of the language。)
答案 1 :(得分:1)