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 就知道了。