es6中顶层对象属性≠全局属性
先思考一下下面代码的输出结果是什么
const a = {
x:1,
fn:()=>this.x+=1
}
const x = 1
a.fn()
console.log(a.x,x)
正确答案为1
1
,why?
原因是,在es5中全局用var function声明还是跟全局挂钩的,而从es6开始,let const class等都不是挂在window上了
//es5
var a=1
console.log(window.a)
// 1
//es6
const a=1
console.log(window.a)
// undefined
所以再分析第一段代码:
const a = {
x:1,
fn:()=>this.x+=1
//这里箭头函数的this继承自对象a,所以this=window,
//window.x = undefined,undefined+1=NAN ,
//所以a.x,x结果不变,
//唯一变化的是window.x=NAN
}
const x = 1
a.fn()
console.log(a.x,x)
======================================= END ========================================