function foo()
{
console.log('foo');
}
function bar()
{
var foo = 5;
foo(); // (*)
}
如何使(*)
指外部函數,而不是局部變量?
function foo()
{
console.log('foo');
}
function bar()
{
var foo = 5;
foo(); // (*)
}
如何使(*)
指外部函數,而不是局部變量?
如果外部範圍是全球範圍內,你可以做
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明確不允許這樣;它不會允許本地符號隱藏更全球的符號。 (這是一個controversial feature of the language,你跳上CoffeeScript的車前。)
謝謝你的教育回答! – greenoldman
在理想情況下,你乾脆把每個將這些模塊放入一個模塊中,並根據需要「需要」這些模塊以避免所有範圍模糊。 – ssube
@ssube,不是在我的情況下,它是少量的代碼,但名稱是好的(說明性的),這就是爲什麼我使用了兩次。當然,我可以用下劃線,但由於示波器不同,它對我來說很難看。 – greenoldman
不確定下劃線在哪裏;我的意思是,如果你有兩個不同的對象(或類型,或你有什麼)具有相同的名稱,這可能表明你應該將你的代碼分割成模塊(或名稱空間)。在'var otherFoo = {foo:function ...'中包裝函數foo()'可以解決你的問題,這是模塊的功能。 – ssube