11.9
上篇博客中有句话是觉得欠妥当的 —— “JavaScript 允许重复声明变量,后声明的覆盖之前的”。
JavaScript 允许变量被重复声明,在声明变量时 JavaScript 会自行判断这个变量是否已经被声明了,如果已经被声明(即已经存在),那么重复声明(即除了变量的非首次声明)会被跳过,不再执行声明的操作。
JavaScript 变量的值是可以被重复赋值的,最后的赋值是这个变量最后的结果。
var a=1; var a=2; //赋值覆盖相当于: var a; //a=1; a=2; //声明覆盖相当于: //var a=1; var a=2;
这个笔记所说的覆盖,其实是赋值的覆盖。如果说后声明的会覆盖已声明的,那么后声明的应该是 undefined 而不是第一次声明时候的赋值,也就是说如果是声明覆盖的话,相当于没有 var a=1 那么一个只有声明没有赋值的变量,它的值就是 undefined。
我们如何验证这个覆盖是声明的覆盖还是赋值的覆盖呢?看下面的代码:
var a=1; var a; //赋值覆盖相当于: var a; //a=1; a; //声明覆盖相当于: //var a=1; var a;
我们再输出a的值,验证下是 undefined 还是 1 就知道了。
console.log(a);