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