So, you think you know JavaScript?

 

Baranovskiy
 
題目一:
 
if (!("a" in window)) {
    var a = 1;
}
alert(a);
答案:undefined
關鍵點:js的全部變量自動提早聲明
           全局變量掛載在window下
 
 
題目二:
 
var a = 1,
    b = function a(x) {
        return x && (x + a(--x));
    };
alert(a);
答案:1
關鍵點:函數聲明與函數表達式的區別;
           函數聲明會覆蓋變量聲明但不會覆蓋變量賦值;
           聲明的函數名與函數表達式的別名優先放在函數的做用域中;
其餘:執行b(2)獲得3
延伸:
var a = 1;
function a(x) { return x && (x + a(--x)); };
          a依然是1,a(2)會報錯「 TypeError: number is not a function
          補充:解析時先提早聲明後賦值,函數聲明覆蓋變量聲明
          再延生:
var a;
function a(x) { return x && (x + a(--x)); };
         執行a(2)獲得3,a++獲得NaN,
         將var a;移到最後依然獲得一樣的結果。          
 
題目三:
function a() {
    alert(this);
}
a.call(null);a.call({});
         答案:[object Window]、[object Object]
         關鍵點:call的this指定功用
                    null將被無視,一樣的還有undefined
相關文章
相關標籤/搜索