2013-04-07 81 views
1

考慮下面的代碼參數:訪問的封閉變量時,該方法具有使用相同的名稱

function() { 
    var a = "Hello World"; 

    function foo(a) { 
    alert(a); 
    } 
} 

這將打印傳遞給foo值。

如何訪問閉包中定義的a變量以便打印「Hello World」?

+0

,你不能有一個匿名函數,除非它的自我執行。 – adeneo 2013-04-07 10:06:06

+0

你所做的有一個正確的名字,叫做[陰影](http://en.wikipedia.org/wiki/Variable_shadowing)。正如其他人指出的那樣,即使是有目的的,也應該避免。 – ZER0 2013-04-07 11:07:26

回答

5

你不能,因爲它在函數範圍中被覆蓋。我也不明白爲什麼這樣的構造會有用。至少可以說,這很令人困惑。 只需更改參數或變量名稱即可。

+0

當然。那當然是我做的。我只是想知道這是否可能。謝謝! – 2013-04-07 10:12:32

0

如果在聲明變量時不使用var,它將是全局變量,您可以通過window.a訪問它。如果外部函數綁定到窗口對象,這也可以工作。

順便說一句,如果你有過變量和參數名稱的控制,你更好的名字他們這不是有效的更好的和容易混淆的方式

相關問題