1. 程式人生 > 程式設計 >javascript最新2020經典面試題

javascript最新2020經典面試題

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常見面試題請關注我們其它相關文章!