據說這道Javascript試題極少數人能夠答出來,你怎麼看?

web前端學習扣qun:584226069免費領取全套教學視訊資料!
Q : 在瀏覽器中執行如下的程式碼片段,請寫出執行結果。
var i = 5;
function test(){
var i = 4;
var innerFunction = new Function('console.log(i);');
innerFunction();
}
test();
如果你不清楚這道題考察的知識點,憑瞎蒙可能很多人會覺得答案是 4。
那麼我們就一起來見證它的執行結果吧

web前端學習扣qun:584226069免費領取全套教學視訊資料!
結果居然是5!

web前端學習扣qun:584226069免費領取全套教學視訊資料!
這道題其實考察的是 "Function" 建構函式的性質,如果我們使用 new Function(...)來構造一個 function ,那麼該 function 實際上是一個匿名函式,而匿名函式內部的 this 是指向全域性的,在瀏覽器中也就是 window 物件。到這裡,結果就不言而喻了,"console.log(i)"中的變數 “i”自然是到全域性中去搜索, 輸出結果就是 5 。
但是!!!!!!!!!!!!!!!

web前端學習扣qun:584226069免費領取全套教學視訊資料!
為什麼問題特別強調了“在瀏覽器中執行”呢?如果在nodejs 環境中執行包含上述程式碼的一個js檔案,會得到什麼結果呢?
在這裡偷偷告訴大家:結果是:
ReferenceError: i is not defined
至於這是為什麼呢?那就讀者自己去體會吧!

web前端學習扣qun:584226069免費領取全套教學視訊資料!
PS : 如果這篇文章讓你有所收穫,別忘了點贊並關注哦,批評指正,每天積累一點,讓我陪你在大牛的路上越走越遠!