2011-09-22 50 views
0

我在一些腳本的NodeJS變量/對象已經看到了正在使用的是這樣的:結果如下:var myvar1 = myvar2 = myvar3?

var myvar1 = myvar2 = myvar3; 

這是爲什麼使用,這是什麼意思?

+2

地段熱烈的回答,但只有一對夫婦正確地提到範圍。 –

+0

[JavaScript的多個左手任務]可能重複(http:// stackoverflow。com/questions/1758576 /多左手作業與javascript) –

回答

3

這臺myvar2myvar3,並設置myvar1myvar2

我假設myvar3myvar2已在此行之前聲明。如果不是,myvar2將是全球性的(因爲沒有var),並且如果沒有定義myvar3,則會出現錯誤。

這將擴展爲:

myvar2 = myvar3; // Notice there's no "var" here 
var myvar1 = myvar2; 
+1

我認爲'myvar2'更可能沒有宣佈聲明;代碼的作者可能沒有意識到它的範圍含義。 –

3

如果:

var myvar3 = 5; 

var myvar1 = myvar2 = myvar3; 

然後,他們都是​​

3

myvar1和myvar2都得到myvar3的名稱。 要評估的第一個表達式是myvar2 = myvar3。這將myvar3分配給myvar2。此操作的結果是分配的值,然後將其分配給myvar1。

4

它會評估爲:

var myvar1 = myvar2 = myvar3; 
var myvar1 = myvar3;   // 'myvar2' has been set to 'myvar3' by now 
myvar3;      // 'myvar1' has been set to 'myvar3' by now 

它首先會分配給myvar3myvar2(不var,所以可能是隱性的全球,注意這一點)。

然後它會將myvar3的值分配給myvar1,因爲返回了設定值。

結果再次返回,這不會再做任何事情 - 在最後一行中,myvar3的值沒有任何反應。

所以最終他們都具有相同的價值。

+1

難道你不是指更像'myvar2 = myvar3','var myvar1 = myvar2'嗎?無論如何,'myvar2'沒有插入本地範圍的事實很​​重要。 +1。 –

+0

@Chris Morgan:我不確定是左側還是右側返回。但是,由於兩者都具有相同的價值,我認爲在這方面沒有真正的區別。 – pimvdb

+0

只是你在那裏沒有什麼意義。重讀它......你正在回答這個問題。 –

1

這會將變量myvar1和myvar2分配給myvar3的值。爲什麼他們這樣做對我來說是未知的,但我最好的猜測是他們希望兩個變量值是myvar3的相同值。

+1

可能的用途:將一些變量初始化爲某個值。例如,'current = minimum = foo.minimum'。 –

1

如已經解釋的那樣,該聲明導致所有變量具有值myvar3

我想補充:使用一樣,你必須提防的範圍說明,以實際行動表明:

function foo(){ 
    var c = 1; 
    var a = b = c; 
    console.log(a,b,c); //=> 1 1 1 
    c = 2; 
    console.log(a,b,c); //=> 1 1 2 
} 
console.log(b); //=> 1! [b] is now a variable in the global scope 

和分配的非原始值的(所以,對對象的引用)

function foo(){ 
    var c = {}; 
    var a = b = c; 
    c.bar = 2; 
    console.log(a.bar,b.bar,c.bar); 
     //=> 1 1 1 (a, b and c point to the same object) 
}