1. 程式人生 > >js 面試題總結

js 面試題總結

面試題解析

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