js5

this

js的this设计

1
var obj = { foo:  5 };

上述代码会在内存中生成对象{foo: 5}, 然后将对象的内存地址赋值给变量obj, 如果要读取obj.foo, 引擎先从obj拿到内存地址, 从该地址读取原始对象, 返回foo属性

1
var obj = { foo: function () {} };

当属性可能是一个函数时, 引擎会将函数单独保存在内存中, 然后将地址复制给foo的value属性

由于函数是一个单独的值,它可以在不同的环境下执行

1
2
3
4
5
6
7
8
var f = function () {};
var obj = { f: f };

// 单独执行
f()

// obj 环境执行
obj.f()

环境变量

js允许在函数体内部, 引用当前环境的其他变量

由于函数能在不同环境执行, 需要一种机制能在函数内部获取当前运行环境, this指代当前运行环境

obj.foo()通过obj找到foo, 就是在obj环境执行

一旦foo = obj.foo, 变量foo指向函数本身, 执行环境就是全局