window.number = 1; var obj = { number: 4, dbl: (function(){ console.log(obj.number); this.number *= 2; console.log(obj.number); return function () { this.number *= 2; } })() } var dbl = obj.dbl; dbl(); obj.dbl(); console.log(window.number); console.log(obj.number);
关键是this的指向问题,在 this 有所属对象时就指向所属对象,没有所属对象就指向全局对象。面试
全体代码有两个做用域函数
局部做用域 obj.nujber 、 obj.dblthis
var dbl = obj.dbl;
function () { this.number *= 2; }code
dbl();
window.number = 2 * 2 = 4对象
obj.dbl();
obj.number = 4 * 2 = 8作用域
console.log(window.number);
执行结果为 window.number = 4io
console.log(obj.number);
执行结果为 obj.number = 8console
因此结果为 4,8function