【轉】典型的JavaScript面試題
阿新 • • 發佈:2017-05-21
() 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面試題