中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript?ES的let與const關鍵字怎么使用

發布時間:2021-12-02 10:00:02 來源:億速云 閱讀:131 作者:iii 欄目:開發技術

這篇文章主要講解了“JavaScript ES的let與const關鍵字怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JavaScript ES的let與const關鍵字怎么使用”吧!

1.let關鍵字

1.1基本用法

let是ECMAScript 2015新增的一個關鍵字,用于聲明變量,其用法類似于var,與之不同的是聲明的變量只能在所在的代碼塊中使用。

語法結構如下所示:

let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];

參數說明:

var1, var2, …, varN:變量名。必須是合法的標識符。

value1, value2, …, valueN:變量的初始值。可以是任意合法的表達式。

示例代碼如下所示:

在全局作用域是定義變量

// 定義全局變量
var a = 100; // 使用 var 關鍵字
let b = 200; // 使用 let 關鍵字
console.log(a); // 100
console.log(b); // 200

我們發現簡單的定義一個全局變量兩者并沒有什么區別。

在塊作用域中定義變量

關于塊級作用域可以參考這篇。

// 在塊作用域中定義變量
{
  var a = 100; // 使用 var 關鍵字
  let b = 200; // 使用 let 關鍵字
}
console.log(a); // 100
console.log(b); // 拋出異常,描述信息為 ReferenceError: b is not defined

如果let是在代碼塊中使用的,其代碼塊則是一個全新的作用域,在作用域外則無法訪問其變量。

ES6 提供的let關鍵字,特別適合在作為for循環計算器的變量使用,如果這樣做的話,其變量只能在循環體內使用,出了這個循環體就會拋出異常,

示例代碼如下所示:

// 定義一個循環體
for (let v = 0; v < 10; v++) {
  console.log("這是一個 for 循環"); // 這是一個 for 循環 * 10
}
console.log(v); // 拋出異常,描述信息為:ReferenceError: v is not defined

值得注意的是,for循環還有一個特別之處,那就是設置循環變量的那一部分是一個父作用域,而循環體又是一個單獨的子作用域,

示例代碼如下所示:

for (let v = 0; v < 10; v++) {
  let v = 10
  console.log(v); // 100 * 10
}

得出上面的那種結果就表示兩個v并不是處于同一個作用域。

1.2不存在變量提升

如果使用var定義變量,就會發生所謂的變量提成,如下代碼所示:

console.log(v); // undefined
var v = 100;

我們在變量聲明之前使用這個值,其并不會報錯,而結果是undefined,這是一個奇怪的邏輯,按照一般的邏輯如果這樣使用的話,其應該會拋出異常。

ECMAScript 2015中,let關鍵字就解決了這個奇怪的現象,

如下代碼所示:

console.log(v); // 拋出異常 描述信息為 ReferenceError: Cannot access 'v' before initialization
let v = 100;

在上述代碼中,則會拋出異常,描述信息為 在聲明之前不能使用某變量。

1.3暫時性死區

只要塊級作用域中存在let關鍵字定義的變量,他所聲明的變量就綁定 這個區域,不會再受外界的影響。示例代碼如下所示:

let v = 100; 
{
  console.log(v); // 拋出異常 描述信息為 ReferenceError: Cannot access 'v' before initialization
  // 此變量綁定在該塊級作用域中,該作用域只能只用此變量
  let v = 200;
}

ECMAScript 2015明確規定,如果區塊中存在let關鍵字,則這個區塊對這些命令聲明的變量從一開始就形成封閉作用域。只要在聲明之前使用這些變量,就會報錯。

總的來說,在塊級作用域中,使用let關鍵字聲明變量之前,該變量是不可用的,這在語法上稱為暫時性死區 ,英文temporal dead zone 簡稱TDZ。

1.4不允許重復聲明

ECMAScript 2015提供的let關鍵字是不允許進行重復聲明,這點與var又不相同,示例代碼如下所示:

// 使用 var 聲明變量
var a = 100;
console.log(a); // 100
var a = 1000; // 重復聲明
console.log(a); // 1000

// 使用 let 聲明變量
let b = 100;
console.log(b); // 100
let b = 1000; // 重復聲明
console.log(b); // 拋出異常 描述信息為:SyntaxError: Identifier 'b' has already been declared

如果重復聲明會拋出SyntaxError異常

1.5與函數的關系

我們在的函數參數相當于使用let關鍵字定義的變量,如果在函數體中重新使用let關鍵字重新聲明一個與參數名一樣的變量則會拋出SyntaxError異常,當然,函數體中使用let也不允許出現變量提升

// 使用 let 聲明變量
let a = 100;
// 定義一個函數
function fun(b) {
  // let b = 10; // 拋出異常,描述信息為:SyntaxError: Identifier 'b' has already been declared
  console.log(a); // 拋出異常,描述信息為:ReferenceError: Cannot access 'a' before initialization
  let a = 200;
}
fun(20)

2.const關鍵字

2.1基礎用法

const關鍵字用于聲明一個常量,我們可以將const關鍵字生成的常量理解為不可變的let變量,這里因為const關鍵字具有let關鍵字的所有特性,在原基礎上增加了不可變這個特性。

所謂的常量就是初始化之后不可變,且聲明時必須初始化,示例代碼如下:

const a = 2
a = 3 // 拋出異常

const b // 未初始化拋出異常

但是我們通過const去初始化一個對象或者數組,我們可改變里面的值,它并不是報錯,示例代碼如下:

const arr = []
arr[0] = 100 
console.log(arr) // [100]
const obj = {}
obj.name = '一碗周'
console.log(obj) // {name: "一碗周"}

出現這種問題的原因是因為const關鍵字實際上保證的并不是變量的值不能被改動,而是變量所指向的那個內存地址不被改動,對于簡單的數據類型,例如StringNumberBoolean,這些值就保存在變量所指向的那個內存地址,所以它不可以進行二次修改。

但是對于復合類型的數據,主要指ArrayObject,變量指向的內存地址,保存的只是一個指針,const只能保證這個指針指向的內存地址是固定的,至于它指向的內存地址中保存的數據結構是不是可變的,就完全不能控制了。

在實際的開發中,我們避免使用var關鍵字,而是使用const關鍵字,需要使用變量時,我們使用let關鍵字。

感謝各位的閱讀,以上就是“JavaScript ES的let與const關鍵字怎么使用”的內容了,經過本文的學習后,相信大家對JavaScript ES的let與const關鍵字怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳泉市| 新乡市| 内黄县| 邳州市| 随州市| 齐齐哈尔市| 河间市| 正定县| 皮山县| 苍山县| 龙江县| 温泉县| 泸定县| 邵武市| 呈贡县| 乐亭县| 光山县| 清涧县| 珲春市| 新平| 瑞安市| 长葛市| 孝昌县| 萨嘎县| 城步| 关岭| 呼图壁县| 巍山| 西安市| 宁南县| 卓尼县| 清涧县| 玉林市| 宣恩县| 寿宁县| 乐亭县| 嘉黎县| 修武县| 托克逊县| 西充县| 泰宁县|