2017-08-27 16 views
2

我正在查找命令,以瞭解編譯器如何讀取代碼。它從左到右或從右到左讀取代碼。 像javascript編譯器讀取代碼行的方式

var a=b=c=100;

在上面的代碼

哪個變量將第一值將如何被分配聲明。?

+0

你真的在問編譯器如何用解釋型語言讀取代碼嗎? – Daniel

+0

在這個例子中,你只提供了一個變量(即'a')。它被賦予賦值爲'b'的值,賦值爲'c',賦值爲'100'。 –

回答

0

以下assignemt:

var a=b=c=100; 

等同於以下分配:

var a = (b = (c= 100)); 
 
console.log(a); 
 
console.log(b); 
 
console.log(c);

話雖這麼說似乎多張賦值是右結合。

0

MDN docs

賦值運算符是右結合,這樣就可以寫:

A = B = 5;預期的結果是a和b的值爲5.這 是因爲賦值運算符返回它分配的值。 首先,b被設置爲5.然後a也被設置爲5,返回值爲 b = 5,也就是賦值的右操作數。

所以對於var a=b=c=100; 第一c,然後b然後a將被分配到100

+0

事情作業運營商是正確的聯想對我來說是一個新的。現在我要探索的..謝謝 –

2

讓我們考慮你所提供的例子:

var a = b = c = 100; 

這相當於:

var a; // declare a 

c = 100; // assign 100 to c 
b = c; // assign 100 to b via c 
a = b; // assign 100 to a via b 

的事情是,在JavaScript中,如果你分配一個值的變量,你有沒有再申報該變量成爲全局變量。這就是上述代碼工作的原因。然而,它也可能會導致問題就像這個例子:

console.log("a", typeof a); // undefined 
 
console.log("b", typeof b); // undefined 
 
console.log("c", typeof c); // undefined 
 

 
function foo(x) { 
 
    var a = b = c = x; 
 
} 
 

 
foo(100); 
 

 
console.log("a", typeof a); // undefined 
 
console.log("b", b); // 100 
 
console.log("c", c); // 100

你真正想要做的是:

var a = 100, b = a, c = b; 

這相當於:

var a, b, c; // all variables are hoisted 

a = 100; 
b = a; 
c = b; 

在JavaScript變量聲明中都是hoisted置於當前範圍的頂部(功能範圍爲var,塊範圍爲constlet)。但是,分配按從左到右的順序進行。已聲明但尚未分配值的變量值爲undefined

+0

thanks.it真的幫助 –

相關問題