前端面試題1

問題: 做用域(Scope)

(function() {
     var a = b = 5;
 })();
 consol.log(b);//5
 cnsole.log(a)//ReferenceError: a is not defined複製代碼

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

這個問題另外一個陷阱就是,在函數中沒有使用」嚴格模式」 ('use strict';)。若是 嚴格模式開啓,那麼代碼就會報錯 」 Uncaught ReferenceError: b is not defined」 。請記住,若是這是預期的行爲,嚴格模式要求你顯式地引用全局做用域。java

(function() {
    'use strict';
     var a = b = 5;
 })();
 console.log(b);//ReferenceError: b is not defined複製代碼
相關文章
相關標籤/搜索