JavaScript 教程
ES2015(ES6) 新增加了兩個重要的 JavaScript 關(guān)鍵字: let 和 const。
let 聲明的變量只在 let 命令所在的代碼塊內(nèi)有效。
const 聲明一個只讀的常量,一旦聲明,常量的值就不能改變。
在 ES6 之前,JavaScript 只有兩種作用域: 全局變量 與 函數(shù)內(nèi)的局部變量。
在函數(shù)外聲明的變量作用域是全局的:
全局變量在 JavaScript 程序的任何地方都可以訪問。
在函數(shù)內(nèi)聲明的變量作用域是局部的(函數(shù)內(nèi)):
函數(shù)內(nèi)使用 var 聲明的變量只能在函數(shù)內(nèi)容訪問,如果不使用 var 則是全局變量。
使用 var 關(guān)鍵字聲明的變量不具備塊級作用域的特性,它在 {} 外依然能被訪問到。
{ var x = 2; } // 這里可以使用 x 變量
在 ES6 之前,是沒有塊級作用域的概念的。
ES6 可以使用 let 關(guān)鍵字來實現(xiàn)塊級作用域。
let 聲明的變量只在 let 命令所在的代碼塊 {} 內(nèi)有效,在 {} 之外不能訪問。
{ let x = 2; } // 這里不能使用 x 變量
使用 var 關(guān)鍵字重新聲明變量可能會帶來問題。
在塊中重新聲明變量也會重新聲明塊外的變量:
let 關(guān)鍵字就可以解決這個問題,因為它只在 let 命令所在的代碼塊 {} 內(nèi)有效。
Internet Explorer 11 及更早版本的瀏覽器不支持 let 關(guān)鍵字。
下表列出了各個瀏覽器支持 let 關(guān)鍵字的最低版本號。
Chrome 49 | IE / Edge 12 | Firefox 44 | Safari 11 | Opera 36 |
Mar, 2016 | Jul, 2015 | Jan, 2015 | Sep, 2017 | Mar, 2016 |
使用 var 關(guān)鍵字:
使用 let 關(guān)鍵字:
在第一個實例中,使用了 var 關(guān)鍵字,它聲明的變量是全局的,包括循環(huán)體內(nèi)與循環(huán)體外。
在第二個實例中,使用 let 關(guān)鍵字, 它聲明的變量作用域只在循環(huán)體內(nèi),循環(huán)體外的變量不受影響。
在函數(shù)體內(nèi)使用 var 和 let 關(guān)鍵字聲明的變量有點類似。
它們的作用域都是 局部的:
// 使用 var function myFunction() { var carName = "Volvo"; // 局部作用域 } // 使用 let function myFunction() { let carName = "Volvo"; // 局部作用域 }
在函數(shù)體外或代碼塊外使用 var 和 let 關(guān)鍵字聲明的變量也有點類似。
它們的作用域都是 全局的:
// 使用 var var x = 2; // 全局作用域 // 使用 let let x = 2; // 全局作用域
在 JavaScript 中, 全局作用域是針對 JavaScript 環(huán)境。
在 HTML 中, 全局作用域是針對 window 對象。
使用 var 關(guān)鍵字聲明的全局作用域變量屬于 window 對象:
使用 let 關(guān)鍵字聲明的全局作用域變量不屬于 window 對象:
使用 var 關(guān)鍵字聲明的變量在任何地方都可以修改:
在相同的作用域或塊級作用域中,不能使用 let 關(guān)鍵字來重置 var 關(guān)鍵字聲明的變量:
var x = 2; // 合法 let x = 3; // 不合法 { var x = 4; // 合法 let x = 5 // 不合法 }
在相同的作用域或塊級作用域中,不能使用 let 關(guān)鍵字來重置 let 關(guān)鍵字聲明的變量:
let x = 2; // 合法 let x = 3; // 不合法 { let x = 4; // 合法 let x = 5; // 不合法 }
在相同的作用域或塊級作用域中,不能使用 var 關(guān)鍵字來重置 let 關(guān)鍵字聲明的變量:
let x = 2; // 合法 var x = 3; // 不合法 { let x = 4; // 合法 var x = 5; // 不合法 }
let 關(guān)鍵字在不同作用域,或不同塊級作用域中是可以重新聲明賦值的:
let x = 2; // 合法 { let x = 3; // 合法 } { let x = 4; // 合法 }
JavaScript 中,var 關(guān)鍵字定義的變量可以在使用后聲明,也就是變量可以先使用再聲明(JavaScript 變量提升)。
let 關(guān)鍵字定義的變量則不可以在使用后聲明,也就是變量需要先聲明再使用。
// 在這里不可以使用 carName 變量 let carName;
const 用于聲明一個或多個常量,聲明時必須進行初始化,且初始化后值不可再修改:
const
定義常量與使用let
定義的變量相似:
兩者還有以下兩點區(qū)別:
const
聲明的常量必須初始化,而let
聲明的變量不用var x = 10; // 這里輸出 x 為 10 { const x = 2; // 這里輸出 x 為 2 } // 這里輸出 x 為 10
const 聲明的常量必須初始化:
// 錯誤寫法 const PI; PI = 3.14159265359; // 正確寫法 const PI = 3.14159265359;
const 的本質(zhì): const 定義的變量并非常量,并非不可變,它定義了一個常量引用一個值。使用 const 定義的對象或者數(shù)組,其實是可變的。下面的代碼并不會報錯:
但是我們不能對常量對象重新賦值:
以下實例修改常量數(shù)組:
但是我們不能對常量數(shù)組重新賦值:
Internet Explorer 10 及更早版本的瀏覽器不支持 const 關(guān)鍵字。
下表列出了各個瀏覽器支持 const 關(guān)鍵字的最低版本號。
Chrome 49 | IE / Edge 11 | Firefox 36 | Safari 10 | Opera 36 |
Mar, 2016 | Oct, 2013 | Feb, 2015 | Sep, 2016 | Mar, 2016 |
使用 var 關(guān)鍵字聲明的變量在任何地方都可以修改:
在相同的作用域或塊級作用域中,不能使用 const 關(guān)鍵字來重置 var 和 let關(guān)鍵字聲明的變量:
var x = 2; // 合法 const x = 2; // 不合法 { let x = 2; // 合法 const x = 2; // 不合法 }
在相同的作用域或塊級作用域中,不能使用 const 關(guān)鍵字來重置 const 關(guān)鍵字聲明的變量:
const x = 2; // 合法 const x = 3; // 不合法 x = 3; // 不合法 var x = 3; // 不合法 let x = 3; // 不合法 { const x = 2; // 合法 const x = 3; // 不合法 x = 3; // 不合法 var x = 3; // 不合法 let x = 3; // 不合法 }
const 關(guān)鍵字在不同作用域,或不同塊級作用域中是可以重新聲明賦值的:
const x = 2; // 合法 { const x = 3; // 合法 } { const x = 4; // 合法 }
JavaScript var 關(guān)鍵字定義的變量可以在使用后聲明,也就是變量可以先使用再聲明(JavaScript 變量提升)。
const 關(guān)鍵字定義的變量則不可以在使用后聲明,也就是變量需要先聲明再使用。
carName = "Volvo"; // 在這里不可以使用 carName 變量 const carName = "Volvo";