2010-05-07 108 views
4

我想知道爲什麼Vector變量這種自我執行JavaScript函數不需要前一個變種中定義的?這只是創建命名函數的其他類型的語法嗎?這是否這樣做,所以我們不能將Vector作爲參數傳遞給其他函數?JavaScript函數定義

(function() { 
    Vector = function(x, y) { 
     this.x = x; 
     this.y = y; 

     return this; 
    }; 

    //...snip 
})() 

回答

2

定義Vector任何其他方式只會封閉的範圍內創建;並且在關閉之外將不可用。

(function() { 
    var Vector = function(x, y) { 
     this.x = x; 
     this.y = y; 

     return this; 
    }; 

    function Vector() { 
     // blah 
    }; 

    //...snip 
})() 

var something = new Vector() // ERROR :< 

沒有 「要求」 的var關鍵詞;使用它定義變量可用的範圍。不使用它意味着變量是在全局範圍內創建的。

+0

感謝大家的幫助。 VS2008 JS智能感知可能更多的問題;但由於某些原因,Vector並沒有出現在自執行功能之外...... – Pierreten 2010-05-07 18:29:50

2

定義的變量,而不var使得全球。上述

3

的代碼構造使得向量在命名空間,因爲它可能是打算用作構造,這可能是確定一個全局變量。

我不會建議增加全局命名空間,其實看看requirejs它的一個非常好的方式與模塊化的JS工作。

1

Vector在這種情況下將附加到當前this這將是window。至少在你提供的代碼中,似乎並不需要包含自我執行功能。