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.dblthis

    var dbl = obj.dbl;
  • obj.dbl 爲當即執行函數
  • window.number = 1 * 2 = 2
  • 執行結果爲一個匿名函數
  • function () { this.number *= 2; }code

    dbl();
  • this ==> window
  • window.number = 2 * 2 = 4對象

    obj.dbl();
  • this ==> obj
  • obj.number = 4 * 2 = 8作用域

    console.log(window.number);
  • 執行結果爲 window.number = 4io

    console.log(obj.number);
  • 執行結果爲 obj.number = 8console

因此結果爲 4,8function

相關文章
相關標籤/搜索