关于js作用域问题

补充:

function Foo(name,age){
    this.name=name;
    this.age=age;
    this.getName=function(){
        console.log(this);
    }
        
}

obj = new Foo("文州",19)
obj.getName()    
//这里把Foo看成类,大写是类,首字母小写是函数


function test(){
    console.log(this);
}

test()=== window.test()
//函数执行相当于window.test().所以打印的this是window对象。

(function(){
    console.log(this)
})()

这个叫自执行函数。this指的还是window。




题目0
var name="女神"
function Foo(name,age){
    this.name=name;
    this.age=age;
    this.getName=function(){
        console.log(this);
        
        (function(){
            console.log(this.name)   //自执行函数里面是window对象
        })()
    }
}

obj = new Foo("文州",19)
obj.getName() 
第一次打印文州,第二次打印女神



想要都打印文州的话
题目1
var name="女神"
function Foo(name,age){
    this.name=name;
    this.age=age;
    this.getName=function(){
        console.log(this);
        var that =this    //把当前环境的this赋值给that.那么这样2个都打印文州
        (function(){
            console.log(that.name)   
        })()
    }
}

obj = new Foo("文州",19)
obj.getName() 

//这样2个都执行文州。

题目2
var name="女神" obj={ name:'文州', age:19, getName:function(){ console.log(this); var that =this (function(){ console.log(that.name) })() } } obj.getName() //这个结果和上面的一样。只是(对象)的声明方式改变了而已。