函数一:
<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的“声明范围”是与它最近的变量?
谢谢!**
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
为什么在函数一中,只有变量a被声明?
因为赋值是从右向左结合:
var a=b=c=d=5;
等价于var a=(b=(c=(d=5)));
,其中只有a被声明了,b,c和d都是自动解析为全局变量了。为什么在函数二中,变量a、b、c都都被声明了?
语法就这样规定的:
参考:
Assignment operators
运算符优先级
var - JavaScript
补充 a 称为 函数show的局部变量
你在函数外是弹不出来的啦
简化上面的答案就是
等同于
var a=5;
b=5;
c=5;
d=5;
a为局部变量,b,c,d为全局变量
简单来说就是变量作用域的问题。上面都详细说了。 为什么呢?JS就是这样定的啦
变量作用域,第一个是声明了
a
为局部变量,b,c,d
全局变量,alert
函数是绑定在window
上的为全局函数,所以取不到a
;第二个声明的全是局部变量,所以全部取不到。