web前端一道很「坑」的js面試題

2021-07-27 09:53:21 字數 1381 閱讀 1824

廢話少說,直接上題:

f = function

() ;

g = function

() ;

(function

() ;

function

g()

}

})();

alert(f()); // ?

這道題之所以坑,是因為網上有不同的答案,婆說婆有理!總體概括為以下三個答案:

答案一:第四行「g()」報錯;

答案二:false;

答案三:true;

最後經本人親自證實發現了這道題最坑的地方,三個答案都是對的,不過在不同的瀏覽器中!如下:

/**

* edge ie11 chrome(較新版) firefox(較新版) 第四行g()報錯(uncaught typeerror:g is not a function)

* ie10 ie9 答案為:false

* ie8及以下 答案為:true

*/

下面來看看網友們的解釋:

答案一:與判斷條件無關,js解析器對自呼叫函式中的函式g進行了預編譯但因為在條件中語句還未執行而去提前呼叫,所以造成報錯。

即使寫成如下**也是如此:

function

g() ;

function

h()

}

}

h();

//edge ie11 chrome(較新版) firefox(較新版) 第四行g()報錯(uncaught typeerror:g is not a function)

答案二:

(function

();

//重新定義f

function g()

//這句沒用 }

})()

;

alert(f

());

//false

答案三:

f = function

() ;

g = function

() ;

(function

() ;

function

g()

}

})();

alert(f()); // true

簡直巨坑,貌似都很有道理!

在下不才,將造成這個問題的原因歸咎為不同瀏覽器的js引擎對函式宣告順序的解析不同,如有更深見解,還請大神不吝賜教。

js一道很誇張的面試題

如題 var a 0 if true a 21 console.log 裡面 a console.log 外部 a 一開始 我認為結果很簡單 就是2個21 後來用谷歌瀏覽器 一列印 結果 竟然是 21和1 唯一的解釋 預解析的時候 應該是這樣的 var a a 0 0function a a 1 c...

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...

一道面試題

前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...