2013-05-02 39 views
1
var in_window = 'a' in window; 
alert(in_window); 
var a = 1; 
//a = 1; 

如果我使用var聲明a不使用VAR之間的差異,那麼in_windowtrue。但是,如果我不使用var來聲明a,那麼in_window將是false什麼用VAR和使用Javascript

這裏使用var和不使用var究竟有什麼區別?

此代碼不在函數內部。在我看來,我認爲無論使用var還是不使用a都是全局變量。但爲什麼in_window的值不一樣。

+0

函數中是否存在代碼? – Thilo 2013-05-02 02:15:27

+0

此代碼不在函數內。在我看來,我認爲無論使用var還是不使用a都是全局變量。但爲什麼in_window的值不一樣。 – huashui 2013-05-02 02:19:33

+0

你描述的結果似乎倒退了。如果你使用'var',那麼'in_window'將是'true',除非你在函數內運行代碼。如果你不使用'var',那麼'in_window'將會是'false',因爲賦值是在'in'測試之後進行的。 – 2013-05-02 02:19:48

回答

0

本質上,如果您使用var,它將在您的本地範圍中創建一個變量。如果你不這樣做,它會在全球範圍內創建它。另外,如果使用var,它會將定義「提升」到函數的頂部。例如:

var a = 1; 

function b() { 
    alert(a); //alerts 1 (global) 
    a = 2; //global is now 2 
    alert(a); //alerts 2 
} 

function c() { 
    alert(a); //alerts undefined, var a got hoisted to the top 
    var a = 3; //local = 3 
    alert(a); //alerts 3 
} 

b(); 
c(); 
alert(a); //alerts 2 (global); 
+0

此代碼不在函數內部。在我看來,我認爲無論使用var還是不使用a都是全局變量。但爲什麼in_window的值不一樣。 – huashui 2013-05-02 02:20:15

0

Javascript中的每個變量都存在於上下文中。當您不使用var來聲明它時,它將被置於頂級上下文中,在瀏覽器的常見情況下,它是window對象。在服務器上運行的node.js中,它將成爲該系統的頂級上下文。

所以,與var a = 1一行,a被放入其函數的上下文中。在窗口中的a = 1 line, it goes in the window, causinga爲真。我希望你在實踐中不用引號。

你在這裏錯過了一件事; JavaScript解析器讀取每個函數以在實際解釋函數之前查找所有變量和函數聲明。函數中兩個語句的順序是無關緊要的:

var f = function() { 
    alert(a in window); 
    var a = 0; 
}; 
+0

不完全不相關。該變量將在頂部定義,但分配將在稍後進行(在執行該操作的行的位置)。 – Thilo 2013-05-02 02:30:01

+0

是的。很少提及一個沒有價值的變量,但這正是他的測試所檢查的。我們應該使用JSLint來幫助我們遵守標準。 – 2013-05-02 03:02:07

相關問題