this
js的this设计
1 | var obj = { foo: 5 }; |
上述代码会在内存中生成对象{foo: 5}, 然后将对象的内存地址赋值给变量obj, 如果要读取obj.foo, 引擎先从obj拿到内存地址, 从该地址读取原始对象, 返回foo属性
1 | var obj = { foo: function () {} }; |
当属性可能是一个函数时, 引擎会将函数单独保存在内存中, 然后将地址复制给foo的value属性
由于函数是一个单独的值,它可以在不同的环境下执行
1 | var f = function () {}; |
环境变量
js允许在函数体内部, 引用当前环境的其他变量
由于函数能在不同环境执行, 需要一种机制能在函数内部获取当前运行环境, this指代当前运行环境
obj.foo()通过obj找到foo, 就是在obj环境执行
一旦foo = obj.foo, 变量foo指向函数本身, 执行环境就是全局