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)
posted @ 2018-04-20 10:06  zhangce  阅读(369)  评论(0编辑  收藏  举报