目录:
- 使用var声明变量的原罪
- 使用let和const声明变量
使用var声明变量的原罪
- 定义的全局变量存入window, 如果同名将直接影响window的成员
console.log('test');
var console = 'helloWorld';
console.log('demo'); // 直接报错, 因为上面定义的console
- 允许重复的变量声明, 导致影响数据被覆盖
var foo = function() {
console.log('我是foo函数');
}
// 这里省略1000行代码
// 协同开发的小伙伴不知道我定义过foo这个变量, 于是他也来一次
var foo = 123;
// 这个时候我再去调用foo执行, 肯定是走不掉了
foo(); // 报错
- 变量提升, 导致奇怪的闭包问题和逻辑问题
// 2. 变量提升, 怪异的数据访问
if( 1 > 2 ) {
var a = 20;
}else {
console.log(a); // undefined
}
console.log(a