Skip to content

this问题 #2

@brucefuqiming

Description

@brucefuqiming
let name = 2222;
let obj = {
    name: 3333,
    a: function() {
        console.log(this.name); // 2222
    }
}
let func = obj.a;
func(); 

这里有问题,func()执行后,打印的是空字符串或undefined(注意:name变量是window对象上的保留变量,所以window.name默认是空字符串),并不是2222。

原因是name是let声明的,因为obj.a赋值给func执行的时候,this指向的是window,而let声明的对象并不存在于window上,所以输出为undefined。除非用var声明,才能达到本例描述的效果。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions