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