javascript里面的this指向

首先我们看教科书里写的: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()

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容