我正在查找命令,以瞭解編譯器如何讀取代碼。它從左到右或從右到左讀取代碼。 像javascript編譯器讀取代碼行的方式
在上面的代碼
var a=b=c=100;
哪個變量將第一值將如何被分配聲明。?
我正在查找命令,以瞭解編譯器如何讀取代碼。它從左到右或從右到左讀取代碼。 像javascript編譯器讀取代碼行的方式
在上面的代碼
var a=b=c=100;
哪個變量將第一值將如何被分配聲明。?
以下assignemt:
var a=b=c=100;
等同於以下分配:
var a = (b = (c= 100));
console.log(a);
console.log(b);
console.log(c);
話雖這麼說似乎多張賦值是右結合。
從MDN docs:
賦值運算符是右結合,這樣就可以寫:
A = B = 5;預期的結果是a和b的值爲5.這 是因爲賦值運算符返回它分配的值。 首先,b被設置爲5.然後a也被設置爲5,返回值爲 b = 5,也就是賦值的右操作數。
所以對於var a=b=c=100;
第一c
,然後b
然後a
將被分配到100
。
事情作業運營商是正確的聯想對我來說是一個新的。現在我要探索的..謝謝 –
讓我們考慮你所提供的例子:
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
,塊範圍爲const
和let
)。但是,分配按從左到右的順序進行。已聲明但尚未分配值的變量值爲undefined
。
thanks.it真的幫助 –
你真的在問編譯器如何用解釋型語言讀取代碼嗎? – Daniel
在這個例子中,你只提供了一個變量(即'a')。它被賦予賦值爲'b'的值,賦值爲'c',賦值爲'100'。 –