<script> function show(){ var a=b=c=d=5; } show(); alert(a);//彈a時報錯(not defined),而b、c、d都能彈出5 </script>
因為賦值是從右向左結合:
var a=b=c=d=5;
等價於 var a=(b=(c=(d=5)));
,其中只有a被聲明了,b,c和d都是自動解析為全局變量了。
<script> function show(){ var a=5,b=6,c=7; } show(); alert(c);//彈出a、b、c全都報錯 </script>
語法就這樣規定的:
概述
變量聲明語句,聲明一個變量並且可以同時初始化該變量。語法
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
varnameN 變量名。變量名可以定義為任何合法標識符。 valueN 變量的初始化值。該值可以為任何合法表達式。描述
變量聲明無論出現在代碼的任何位置,都會在任何代碼執行之前處理。使用var語句聲明的變量的作用域是當前執行>位置的上下文:一個函數的內部(聲明在函數內)或者全局(聲明在函數外)。
....
參考:
-
Assignment operators
-
運算符優先級
-
var - JavaScript