javascript里面的this指向

2019-08-13  本文已影响0人  一只特立独行的猪2019

首先我们看教科书里写的:this指的是函数运行时所在的环境。

接下来我们要弄清楚为什么会这样?也就是说,函数的运行环境到底是怎么决定的?举例来说,为什么obj.foo()就是在obj环境执行,而一旦var foo = obj.foo,foo()就变成在全局环境执行?

所以要理解this指向其实是要弄清楚方法的运行环境。

varobj={foo:1}

当我们将一个对象赋值给一个变量时,JavaScript 引擎会先在内存里面,生成一个对象{ foo: 1 },然后把这个对象的内存地址赋值给变量obj。

也就是说对象其实是一个地址,我们要拿到对象里的变量和方法,先要从内存里拿到地址,然后再从该地址读出原始的对象,返回属性。

varobj={foo:function(){}}

当对象属性值是一个方法时,引擎会将函数单独保存在内存中,然后再将函数的地址赋值给对象foo属性的value属性

普通变量:{foo:{[[value]]:5}}

属性值为方法时:{foo:{[[value]]:函数的地址...}}

由于函数是一个单独的值,所以它可以在不同的环境(上下文)执行

varf=function(){};

varobj={f:f};

// 单独执行

f()

// obj 环境执行

obj.f()

上一篇 下一篇

猜你喜欢

热点阅读