簡體   English   中英

使用var與函數聲明javascript對象有什么區別?

[英]What is the difference between declaring javascript objects with var vs. with function?

我是一個困惑的新手。 我在教程中讀到你創建一個像這樣的javascript對象:

function myObject() {
    this.myProperty = "a string";
    this.myMethod = function () {
        //Method code
    }
}

然后我在其他地方讀到你創建一個像這樣的對象:

var myObject = {
    myProperty: "a string",
    myMethod : function () {
        //Method code
    }
}

兩者之間的(非主觀)差異是什么? 是否有正式的正確方式和錯誤的方式?

兩個聲明都是正確的,但它們具有不同的語義。

第一種聲明允許您創建對象的實例:

var t = new myObject();
// then use t
t.myProperty = "some value";

var otherT = new myObject();
otherT.myProperty = "some other value";

第二個幾乎就像一個靜態對象:

myObject.myProperty = "some value";

這是一個直接比較......

function myObject() {

這解析了解析JavaScript時的函數...

var myObject = function () {

這在運行時聲明了該函數。

如果使用“var”方法,則必須在使用之前聲明函數...嘗試此示例。

myFunction(); // Works
myVarFunction(); // Boom

var myVarFunction = function () { alert("Hi"); };

function myFunction() { alert("Hi"); };

那么為什么要使用“var”方法,如果你必須更加小心地使用它? 這與范圍有關...范圍函數被認為更好。

更新:這里有一些很好的解釋:

var functionName = function(){} vs function functionName(){}

兩者之間的主要區別在於一個變量是本地變量而另一個變量是全局變量。 “var”基本上定義了變量的范圍。

當我們將var添加到變量賦值時,javascript確保變量僅限於分配給它的任何函數,並且不會與另一個函數中的同名變量沖突。

當我們不使用var時,它被聲明為全局函數,並且可能發生碰撞。 因此,始終建議在變量賦值之前使用“var”。 如果需要,使用匿名函數進行關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM