【学习笔记】js中的this

2020-03-12  本文已影响0人  简爱WindMan

js存储方式

var obj1={
a:1// a的属性被存到栈中[value:1,xxxx: ,yyyy:  ],1属于基本类型,直接存储到了value里
}
var obj2={
a:function(){
}// a的属性被存到栈中[value:函数在堆中的地址,xxxx: ,yyyy:  ],函数是引用类型,地址存储到了value里
}
var a={x:1}
var b=a;
b.x=2;
此时:a.x=2,不再等于1了

为什么这么存储

运行环境

    var obj1 = {
      f1: function() { // 本函数被存到堆中,把地址给了f1
        return this.aaa
      },
      aaa: 1
    }

    var f = obj1.f1; // 此时的f的value里的地址和obj1.f1的value里的地址是一样的
    var aaa = 10;

    var obj2 = {
      f2: obj1.f1, // 此时的f2的value里的地址和obj1.f1的value里的地址是一样的
      aaa: 2
    }
// 函数只有一份,只是把地址给了三个变量f1、f2、f,他们对函数本体独立操作。
    console.log('f: ', f()) //  f调用函数的时候,f的环境里aaa=10;
    console.log('f1: ', obj1.f1()) //  f1调用函数的时候,f1的环境里aaa=1;
    console.log('f2: ', obj2.f2()) //  f2调用函数的时候,f2的环境里aaa=2;
上一篇下一篇

猜你喜欢

热点阅读