小夥伴們,前一段時間一直在加班,沒有過濾面試題啦~今天我又要跟大家囉嗦幾句嘍~~~
在面試過程中尤其是筆試題,經常會出現變量提升及聲明沒有賦值的程序題,理解不好的話,就會入坑了,現在我們通過以下題目來理解一下:
if (!("b" in window)) {
var b = 1;
}
alert(b);//undefined
1、這個題目的考察點:1、在作用域內的變量提升;2、變量只有聲明沒有賦值;3、所有全局變量都是window的屬性
2、變量提升其實很好理解。比如題中代碼,其實引擎是這樣讀取的:var b; if(!("b" in window)){ b = 1;}alert(b);
3、這段代碼的處理邏輯:(1)聲明一個變量b(2)"b" in window 結果爲true,但是!("b" in window)結果爲false,if語句不執行(3)alert(b),因爲b只有聲明沒有賦值,所以結果是undefined
第二個題目嘍:
function foo(a) {
var a;
return a;
}
function bar(a) {
var a = 'bye';
return a;
}
[foo('hello'), bar('hello')]//輸出結果爲:hello,bye
原釀臭臭也沒有一下看出來變量提升;這個題目將變量提升之後就不難理解嘍:
var a;
function foo(a) {
return a;
}
function bar(a) {
a = 'bye';
return a;
}
[foo('hello'), bar('hello')]//輸出結果爲:hello,bye