1、函数可以在不同的环境执行,函数内部获取当前执行环境,所以出现了this,不同的调用方式this指向不同

<!-- 浏览器环境 -->
<script>
    var name = "jack";
    var age = 18;
    
    var lily = {
        name:'lily',
        age:20,
        info: this.name + ": " + this.age,  // this指向window
        getName: function(){
            return this.name;  // 调用方式不同,this指向不同
        }
    };
    
    console.log(lily.info);  // jack: 18
    console.log(lily.getName());  // lily
    
    var fn = lily.getName;
    console.log(fn());  // jack
</script>

原因:

属性描述对象的value值是一个function时,value里存的是一个指向function的指针

image.png


2、node下的全局this(global)和浏览器下的全局this(指向window)不同

// node 运行

var name = "jack";  // 模块下的局部变量 
var age = 18;

global.name = "global_jack";  // 全局变量
global.age = 16

var lily = {
    name:'lily',
    age:20,
    info: name + ": " + age,
    globalInfo: this.name + ": " + this.age,  // this是一个{},也不是global(this == global 为false),为什么???
    getName: function(){
        return this.name;)
    }
};

console.log(lily.info);  // jack: 18
console.log(lily.globalInfo);  // undefined: undefined
console.log(lily.getName());  // lily

var fn = lily.getName;  // fn为一个指针
console.log(fn());  // global_jack

疑问:对象声明的过程及其this的指向