为什么同一个函数运行时,结构不一样?
obj.foo() 是在 obj 的环境下执行
foo() 在全局环境中执行
解释原理,理解this作用
二、内存的数据结构 《=》 地址
{a:1,b:2} =》 HashMap
JavaScript语言之所以有this的设计,跟内存里面的数据结构有关系。
跟传统语言的this不一样 ,面向对象中
var obj = (foo:5);
右边先执行 生成一个对象 ,存储在内存当中,然后把地址给 obj
引用是通过地址发生的;
函数?
obj.foo 的过程
引擎chrome v8 先从obj拿到内存地址 ,然后从该地址读取原始的对象,然后从这个对象里面返回foo 属性,
三、函数
属性的值 可能是一个函数
再往下指了
引擎 chrome v8 给函数一个单独的内存空间,
将地址给我们的foo 属性
函数是一个单独的值,他可以在不同的环境下运行,上下文。
需要一个this 来决定当前的上下文
四、环境变量
为什么要上下文环境?
JavaScript允许函数体内部引用当前环境的其他变量
var f = function () {
var x = 1;
console.log(this.x);
}
var obj = {
var x = 1
f:function(){
console.log(this.x);
this 指定上下文环境
}
}
函数是一个吃着碗里的,看着锅里的家伙,
如果要去访问到其它的环境里的变量值,
可以通过this指向,来表示当前的上下文环境、
bind ,call 手动指定