ES5和ES6变量声明的差异
顽固不化的 var 和 function
问题情景再现
// 1. let/const 声明的变量不挂载在windows上
let c = 'hello world';
console.log(window.c); // undefined
// 2. this指向
let len = 10;
function fn() {
return this.len;
}
fn(); // undefined
// 3. arguments对象调用fn方法
const person = {
len: 5,
say: function() {
fn(); // undefined
arguments.len = 20;
arguments[0](); // 20
}
}
person.say(fn);
原因分析
ES5中,顶层对象的属性等价于全局变量。ES6中,有所改变var、function声明的全局变量,依然是顶层对象的属性;let、const、class声明的全局变量不属于顶层对象的属性;
let和const声明的变量存在于Scope作用域链上的名为Script的作用域中,不挂载在window对象上
总结
- 都2019年了,放弃使用
var吧