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