中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

JavaScript let 和 const

ECMAScript 2015(ECMAScript 6)

ES2015(ES6) 新增加了兩個重要的 JavaScript 關(guān)鍵字: letconst。

let 聲明的變量只在 let 命令所在的代碼塊內(nèi)有效。

const 聲明一個只讀的常量,一旦聲明,常量的值就不能改變。

在 ES6 之前,JavaScript 只有兩種作用域: 全局變量函數(shù)內(nèi)的局部變量


全局變量

在函數(shù)外聲明的變量作用域是全局的:

實例

var carName = "Volvo"; // 這里可以使用 carName 變量 function myFunction() { // 這里也可以使用 carName 變量 }

運行代碼 ?

全局變量在 JavaScript 程序的任何地方都可以訪問。


局部變量

在函數(shù)內(nèi)聲明的變量作用域是局部的(函數(shù)內(nèi)):

實例

// 這里不能使用 carName 變量 function myFunction() { var carName = "Volvo"; // 這里可以使用 carName 變量 } // 這里不能使用 carName 變量

運行代碼 ?

函數(shù)內(nèi)使用 var 聲明的變量只能在函數(shù)內(nèi)容訪問,如果不使用 var 則是全局變量。


JavaScript 塊級作用域(Block Scope)

使用 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)鍵字重新聲明變量可能會帶來問題。

在塊中重新聲明變量也會重新聲明塊外的變量:

實例

var x = 10; // 這里輸出 x 為 10 { var x = 2; // 這里輸出 x 為 2 } // 這里輸出 x 為 2

運行代碼 ?

let 關(guān)鍵字就可以解決這個問題,因為它只在 let 命令所在的代碼塊 {} 內(nèi)有效。

實例

var x = 10; // 這里輸出 x 為 10 { let x = 2; // 這里輸出 x 為 2 } // 這里輸出 x 為 10

運行代碼 ?

瀏覽器支持

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

循環(huán)作用域

使用 var 關(guān)鍵字:

實例

var i = 5; for (var i = 0; i < 10; i++) { // 一些代碼... } // 這里輸出 i 為 10

運行代碼 ?

使用 let 關(guān)鍵字:

實例

let i = 5; for (let i = 0; i < 10; i++) { // 一些代碼... } // 這里輸出 i 為 5

運行代碼 ?

在第一個實例中,使用了 var 關(guān)鍵字,它聲明的變量是全局的,包括循環(huán)體內(nèi)與循環(huán)體外。

在第二個實例中,使用 let 關(guān)鍵字, 它聲明的變量作用域只在循環(huán)體內(nèi),循環(huán)體外的變量不受影響。


局部變量

在函數(shù)體內(nèi)使用 varlet 關(guān)鍵字聲明的變量有點類似。

它們的作用域都是 局部的:

// 使用 var
function myFunction() {
    var carName = "Volvo";   // 局部作用域
}

// 使用 let
function myFunction() {
    let carName = "Volvo";   //  局部作用域
}

全局變量

在函數(shù)體外或代碼塊外使用 varlet 關(guān)鍵字聲明的變量也有點類似。

它們的作用域都是 全局的:

// 使用 var
var x = 2;       // 全局作用域

// 使用 let
let x = 2;       // 全局作用域

HTML 代碼中使用全局變量

在 JavaScript 中, 全局作用域是針對 JavaScript 環(huán)境。

在 HTML 中, 全局作用域是針對 window 對象。

使用 var 關(guān)鍵字聲明的全局作用域變量屬于 window 對象:

實例

var carName = "Volvo"; // 可以使用 window.carName 訪問變量

運行代碼 ?

使用 let 關(guān)鍵字聲明的全局作用域變量不屬于 window 對象:

實例

let carName = "Volvo"; // 不能使用 window.carName 訪問變量

運行代碼 ?

重置變量

使用 var 關(guān)鍵字聲明的變量在任何地方都可以修改:

實例

var x = 2; // x 為 2 var x = 3; // 現(xiàn)在 x 為 3

運行代碼 ?

在相同的作用域或塊級作用域中,不能使用 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 變量提升)。

實例

// 在這里可以使用 carName 變量 var carName;

運行代碼 ?

let 關(guān)鍵字定義的變量則不可以在使用后聲明,也就是變量需要先聲明再使用。

// 在這里不可以使用 carName 變量

let carName;

const 關(guān)鍵字

const 用于聲明一個或多個常量,聲明時必須進行初始化,且初始化后值不可再修改:

實例

const PI = 3.141592653589793; PI = 3.14; // 報錯 PI = PI + 10; // 報錯

運行代碼 ?

const定義常量與使用let 定義的變量相似:

  • 二者都是塊級作用域
  • 都不能和它所在作用域內(nèi)的其他變量或函數(shù)擁有相同的名稱

兩者還有以下兩點區(qū)別:

  • const聲明的常量必須初始化,而let聲明的變量不用
  • 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ù)組,其實是可變的。下面的代碼并不會報錯:

實例

// 創(chuàng)建常量對象 const car = {type:"Fiat", model:"500", color:"white"}; // 修改屬性: car.color = "red"; // 添加屬性 car.owner = "Johnson";

運行代碼 ?

但是我們不能對常量對象重新賦值:

實例

const car = {type:"Fiat", model:"500", color:"white"}; car = {type:"Volvo", model:"EX60", color:"red"}; // 錯誤

運行代碼 ?

以下實例修改常量數(shù)組:

實例

// 創(chuàng)建常量數(shù)組 const cars = ["Saab", "Volvo", "BMW"]; // 修改元素 cars[0] = "Toyota"; // 添加元素 cars.push("Audi");

運行代碼 ?

但是我們不能對常量數(shù)組重新賦值:

實例

const cars = ["Saab", "Volvo", "BMW"]; cars = ["Toyota", "Volvo", "Audi"]; // 錯誤

運行代碼 ?

瀏覽器支持

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)鍵字聲明的變量在任何地方都可以修改:

實例

var x = 2; // 合法 var x = 3; // 合法 x = 4; // 合法

在相同的作用域或塊級作用域中,不能使用 const 關(guān)鍵字來重置 varlet關(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 變量提升)。

實例

carName = "Volvo"; // 這里可以使用 carName 變量 var carName;

運行代碼 ?

const 關(guān)鍵字定義的變量則不可以在使用后聲明,也就是變量需要先聲明再使用。

carName = "Volvo";    // 在這里不可以使用 carName 變量
const carName = "Volvo";