1. 程式人生 > >【轉】典型的JavaScript面試題

【轉】典型的JavaScript面試題

() cee not spa tro cnblogs and enc 分配

問題1: 作用域(Scope)

1 (function() {
2   "use strict";
3   var a = b = 5;
4 })();
5 console.log(b);

控制臺(console)會打印出什麽?

答案:

上述代碼會打印出5

這個問題的陷阱就是,在立即執行函數表達式(IIFE)中,有兩個賦值,但是其中變量a使用關鍵詞var來聲明。這就意味著a是這個函數的局部變量。與此相反,b被分配給了全局作用域(譯註:也就是全局變量)。

這個問題另一個陷阱就是,在函數中沒有使用”嚴格模式” (‘use strict‘;)。如果 嚴格模式開啟,那麽代碼就會報錯 ” Uncaught ReferenceError: b is not defined” 。請記住,如果這是預期的行為,嚴格模式要求你顯式地引用全局作用域。所以,你需要像下面這麽寫:

1 (function () {
2   ‘use strict‘;
3   var a = b = 5;
4 }) ();
5 console.log(b);

自己註:嚴格模式下,火狐依然是輸出5,而360瀏覽器才報錯是” Uncaught ReferenceError: b is not defined”。

【轉】典型的JavaScript面試題