Javascript声明变量时
var aaa = 111;
和
aaa = 111;
两种方式一样吗?
废话少说,先上代码.
1. 使用var定义
var aaa = 11;
function test4(){
var aaa = 22;
console.log(aaa);
}
test4(); //22
console.log(aaa); //11
结果是什么呢? 11
这个好理解, 函数内的var aaa声明是内部变量,这时结果是第一个aaa的值.
2. 不使用var定义
变动一下如下:
var abc = 11;
function test4(){
abc = 22;
console.log(abc);
}
test4(); //22
console.log(abc); //22,注意这里
结果是什么呢? 22
再改:
function test4(){
var aaa = 22;
}
test4();
console.log(aaa); //aaa is not defined
结果怎样? 运行报错了! ReferenceError: aaa is not defined!
改:
function test4(){
var aaa = 22;
}
test4();
console.log(test4.aaa); //undefined
运行不会报错,输出结果是 undefined.
结论1: 函数或者对象构造内声明的变量是私有的. 外部无法访问到. 包括原型继承后的对象.
可是如果这样:
function test4(){
bbb = 33;
}
test4();
console.log(bbb); //33
结果是 33
点解?
这就是有var 和没有 var的声明的区别.
结论2: 不加var 在函数或者构造内就是赋值, 从函数内往上一层层寻找变量bbb,一直到顶层没有. 就在顶层声明一个 var bbb;
很可怕假如一个大的项目,在这里改变了bbb的值, 并没有添加var 碰巧整个项目全局变量有个同名bbb被改变,不加var不是只作用在这个函数或对象内. 出了错误很难找.
所以书写代码必须谨慎. 声明变量改加的就加不能怕麻烦. 结果是完全不同的.