1 内存的数据结构 var obj = {foo: 5};
存储过程: js引擎会先在内存里,生成一个对象{foo: 5}, 然后把这个对象的内存地址赋值给变量obj
变量obj是一个地址, 如果要读取obj.foo 引擎从obj拿到内存地址,然后再从地址独处原始的对象,返回f00属性
原始对象的保存结构:
2 如果对象的某个属性值是函数呢 var obj = { foo: function(){}};
存储过程: 引擎将函数单独保存在内存中, 然后将函数的地址赋值给foo属性的value 值
3 环境变量
由于函数是一个单独的值,所以它可以在不同的环境(上下文)执行
js允许在函数体内部,引用当前环境的其他变量, 该变量由运行环境提供
所以, this就出现了, 设计的目的就是在函数体内部,指代函数当前的运行环境
obj.foo() 是通过obj找到foo,所以就是在obj环境执行
总结: this 代表了当前函数的执行上下文, 方便开发者在函数中使用上下文变量