问题
1 | var obj = { foo: 5 }; |
如上,将一个对象赋值给变量obj
,JavaScript
引擎会先在内存里生成一个对象{foo: 5}
,再把这个对象的内存地址赋值给变量obj
所以,变量obj
是一个地址(reference),如果之后要读取obj.foo
,引擎会先从obj
拿到内存地址,然后再从该地址读出原始的对象,返回foo
属性
原始对象以字典结构保存,每一个属性名都对应一个属性描述对象。如上foo
属性,实际是以如下形式保存:
1 | { |
缘由
对象的属性值可能是一个函数
1 | var obj = { foo: function () {} } |
而此时引擎会将函数单独保存在内存中,然后再将函数的地址赋值给foo
属性的value
属性
由于函数是一个单独的值,所以它可以在不同的环境(上下文)执行
1 | var f = function () {}; |
因此需要一种机制,能在函数内部提供当前的运行环境(context),这就是this
,被用来在函数体内部,指代函数当前的运行环境
1 | var f = function () { |
区别
1 | var obj = { |