當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
【JavaScript】比较 var 和 let 关键字的作用域
生活随笔
收集整理的這篇文章主要介紹了
【JavaScript】比较 var 和 let 关键字的作用域
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
比較 var 和 let 關鍵字的作用域
使用 var 關鍵字聲明變量時,它是全局聲明的,如果在函數內部聲明則是局部聲明的。
let 關鍵字的行為類似,但有一些額外的功能。 在代碼塊、語句或表達式中使用 let 關鍵字聲明變量時,其作用域僅限于該代碼塊、語句或表達式。
例如:
var numArray = []; for (var i = 0; i < 3; i++) {numArray.push(i); } console.log(numArray); console.log(i);此處控制臺將顯示值 [0, 1, 2] 和 3。
使用 var 關鍵字,i 是全局聲明的。 所以當 i++ 被執行時,它會更新全局變量。 此代碼類似于以下內容:
var numArray = []; var i; for (i = 0; i < 3; i++) {numArray.push(i); } console.log(numArray); console.log(i);此處控制臺將顯示值 [0, 1, 2] 和 3。
如果你創建一個函數,將它存儲起來,稍后在使用 i 變量的 for 循環中使用。這么做可能會出現問題。 這是因為存儲的函數將始終引用更新后的全局 i 變量的值。
var printNumTwo; for (var i = 0; i < 3; i++) {if (i === 2) {printNumTwo = function() {return i;};} } console.log(printNumTwo());此處控制臺將顯示值 3。
可以看到,printNumTwo() 打印了 3 而不是 2。 這是因為賦值給 i 的值已經更新,printNumTwo() 返回全局的 i,而不是在 for 循環中創建函數時 i 的值。 let 關鍵字就不會出現這種現象:
let printNumTwo; for (let i = 0; i < 3; i++) {if (i === 2) {printNumTwo = function() {return i;};} } console.log(printNumTwo()); console.log(i);在這里控制臺將顯示值 2 和一個錯誤提示 i is not defined。
i 未定義,因為它沒有在全局范圍內聲明。 它只在 for 循環語句中被聲明。 printNumTwo() 返回了正確的值,因為 let 關鍵字創建了三個具有唯一值(0、1 和 2)的不同 i 變量在循環語句中。
總結
以上是生活随笔為你收集整理的【JavaScript】比较 var 和 let 关键字的作用域的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【TypeScript】parseInt
- 下一篇: 【TypeScript】防止对象改变