1.只声明一个的情况
<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都是自动解析为全局变量了。
2.接连声明几个的情况
<script>
function show(){
var a=5,b=6,c=7;
}
show();
alert(c);//弹出a、b、c全都报错
</script>
由此可见var声明了3个局部的变量
let也是一样的
let webName="蚂蚁部落",address="青岛市南区";
console.log(webName);
console.log(address);
代码的运行结果如下:
蚂蚁部落
青岛市南区
3…要声明函数对象的情况
var a=1,b=2,c=3,d=4;
也就是用,分隔多个变量。
这样不换行的情况,只适合变量值比较单一的情况,如果你的变量是函数或对象,则要换行了:
var a=function (){
var b,c,d;
},
b = {
b:1,
a:2
};
这样可以一直写下去,且能保持良好的可读性。当然,最后记得要用;收尾。
4.关于变量的删除的问题
var webName="蚂蚁部落";
address="青岛南区";
delete webName;
delete address;
console.log(webName);
console.log(address);
结果如下:
可以看到使用var声明的变量没有被删除,不使用var的被删除,所以代码会报错。
由此可见,两者是不同的,var声明的是一个真正的变量,address只是window的一个自定义属性。
不使用var的address其实是全局对象的一个属性,也就是说为全局对象添加了一个自定义属性adress并赋值,