var有变量提升,let/const没有变量提升。原因是:
var(function也是)在js进行解释扫描的时候,会先挂载在window上,而let/const并不挂载到window上
// let在es5的实现(类似于从let开始到代码结束,加了一个自执行函数)
(function () {
var a = 1;
console.log(a, this); // 1
// ...后边的代码全放这里
})();
// const在es5中的实现(类似于从const开始加了一个对象)
var aa = {
init: () => {
aa.A = 2;
console.log(this, aa.A); // window 1
// ...其他代码放这里
},
};
Object.defineProperty(aa, "A", {
value: 1,
writable: false, //设置属性只读
configurable: true,
enumerable: true,
});
aa.init();