函数一:
<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被声明了;为什么在函数二中,变量a、b、c都都被声明了?难道是var的“声明范围”是与它最近的变量?
谢谢!**
为什么在函数一中,只有变量a被声明?
因为赋值是从右向左结合:
var a=b=c=d=5;
等价于var a=(b=(c=(d=5)));
,其中只有a被声明了,b,c和d都是自动解析为全局变量了。为什么在函数二中,变量a、b、c都都被声明了?
语法就这样规定的:
参考:
Assignment operators
运算符优先级
var - JavaScript