javascript最新2020經典面試題
阿新 • • 發佈:2020-02-21
let 和 var
(a): let 宣告的變數只在 let 命令所在的程式碼塊內有效
(b): let 是在程式碼塊內有效,var 是在全域性範圍內有效:
(c): let 不存在變數提升,var 會變數提升:
for (var i = 0; i < 10; i++) { setTimeout(function(){ console.log(i); }) } // 輸出十個 10 for (let j = 0; j < 10; j++) { setTimeout(function(){ console.log(j); }) } // 輸出 0123456789
解析:
變數 i 是用 var 宣告的,在全域性範圍內有效,所以全域性中只有一個變數 i,每次迴圈時,setTimeout 定時器裡面的 i 指的是全域性變數 i ,而迴圈裡的十個 setTimeout 是在迴圈結束後才執行,所以此時的 i 都是 10。
變數 j 是用 let 宣告的,當前的 j 只在本輪迴圈中有效,每次迴圈的 j 其實都是一個新的變數,所以 setTimeout 定時器裡面的 j 其實是不同的變數,即最後輸出 12345。(若每次迴圈的變數 j 都是重新宣告的,如何知道前一個迴圈的值?這是因為 JavaScript 引擎內部會記住前一個迴圈的值)。
以上就是javascript最新2020經典面試題的詳細內容,更多關於javascript常見面試題請關注我們其它相關文章!