ES2015(ES6) 新增加了兩個(gè)重要的 JavaScript 關(guān)鍵字: let 和 const。
let 聲明的變量只在 let 命令所在的代碼塊內(nèi)有效。
const 聲明一個(gè)只讀的常量,一旦聲明,常量的值就不能改變。
在 ES6 之前,JavaScript 只有兩種作用域: 全局變量 與 函數(shù)內(nèi)的局部變量。
在函數(shù)外聲明的變量作用域是全局的:
var carName = "Volvo";
// 這里可以使用 carName 變量
function myFunction() {
// 這里也可以使用 carName 變量
}
局部變量:函數(shù)內(nèi)使用 var 聲明的變量只能在函數(shù)內(nèi)訪問,如果不使用 var 則是全局變量。
// 這里不能使用 carName 變量
function myFunction() {
var carName = "Volvo";
// 這里可以使用 carName 變量
}
// 這里不能使用 carName 變量
JavaScript 塊級(jí)作用域(Block Scope)
使用 var 關(guān)鍵字聲明的變量不具備塊級(jí)作用域的特性,它在 {} 外依然能被訪問到。
{
let x = 2;
}
// 這里不能使用 x 變量
重新定義變量
使用 var 關(guān)鍵字重新聲明變量可能會(huì)帶來(lái)問題。
在塊中重新聲明變量也會(huì)重新聲明塊外的變量:
var x = 10;
// 這里輸出 x 為 10
{
var x = 2;
// 這里輸出 x 為 2
}
// 這里輸出 x 為 2
let 關(guān)鍵字就可以解決這個(gè)問題,因?yàn)樗辉?let 命令所在的代碼塊 {} 內(nèi)有效。
var x = 10;
// 這里輸出 x 為 10
{
let x = 2;
// 這里輸出 x 為 2
}
// 這里輸出 x 為 10
循環(huán)作用域
使用 var 關(guān)鍵字:
var i = 5;
for (var i = 0; i < 10; i++) {
// 一些代碼...
}
// 這里輸出 i 為 10
使用 let 關(guān)鍵字:
var i = 5;
for (let i = 0; i < 10; i++) {
// 一些代碼...
}
// 這里輸出 i 為 5
在第一個(gè)實(shí)例中,使用了 var 關(guān)鍵字,它聲明的變量是全局的,包括循環(huán)體內(nèi)與循環(huán)體外。
在第二個(gè)實(shí)例中,使用 let 關(guān)鍵字, 它聲明的變量作用域只在循環(huán)體內(nèi),循環(huán)體外的變量不受影響。
HTML 代碼中使用全局變量
在 JavaScript 中, 全局作用域是針對(duì) JavaScript 環(huán)境。
在 HTML 中, 全局作用域是針對(duì) window 對(duì)象。
使用 var 關(guān)鍵字聲明的全局作用域變量屬于 window 對(duì)象:
var carName = "Volvo";
// 可以使用 window.carName 訪問變量
let carName = "Volvo";
// 不能使用 window.carName 訪問變量
const 關(guān)鍵字
const 用于聲明一個(gè)或多個(gè)常量,聲明時(shí)必須進(jìn)行初始化,且初始化后值不可再修改。
const
定義常量與使用let
定義的變量相似:
兩者還有以下兩點(diǎn)區(qū)別:
總結(jié)筆記:
使用var關(guān)鍵字聲明的全局作用域變量屬于window對(duì)象。
使用let關(guān)鍵字聲明的全局作用域變量不屬于window對(duì)象。
使用var關(guān)鍵字聲明的變量在任何地方都可以修改。
在相同的作用域或塊級(jí)作用域中,不能使用let關(guān)鍵字來(lái)重置var關(guān)鍵字聲明的變量。
在相同的作用域或塊級(jí)作用域中,不能使用let關(guān)鍵字來(lái)重置let關(guān)鍵字聲明的變量。
let關(guān)鍵字在不同作用域,或不用塊級(jí)作用域中是可以重新聲明賦值的。
在相同的作用域或塊級(jí)作用域中,不能使用const關(guān)鍵字來(lái)重置var和let關(guān)鍵字聲明的變量。
在相同的作用域或塊級(jí)作用域中,不能使用const關(guān)鍵字來(lái)重置const關(guān)鍵字聲明的變量
const 關(guān)鍵字在不同作用域,或不同塊級(jí)作用域中是可以重新聲明賦值的:
var關(guān)鍵字定義的變量可以先使用后聲明。
let關(guān)鍵字定義的變量需要先聲明再使用。
const關(guān)鍵字定義的常量,聲明時(shí)必須進(jìn)行初始化,且初始化后不可再修改。
轉(zhuǎn)自菜鳥教程
該文章在 2024/6/28 15:28:44 編輯過