js 面試題總結
阿新 • • 發佈:2018-11-10
面試題解析
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 有所屬物件時就指向所屬物件,沒有所屬物件就指向全域性物件。
全體程式碼有兩個作用域
- 全域性作用域 number 、 obj
區域性作用域 obj.nujber 、 obj.dbl
var dbl = obj.dbl;
- obj.dbl 為立即執行函式
- window.number = 1 * 2 = 2
- 執行結果為一個匿名函式
function () { this.number *= 2; }
dbl();
- this ==> window
window.number = 2 * 2 = 4
obj.dbl();
- this ==> obj
obj.number = 4 * 2 = 8
console.log(window.number);
執行結果為 window.number = 4
console.log(obj.number);
執行結果為 obj.number = 8
所以結果為 4,8