title: let和const聲明的區(qū)別
date: 2018-10-20 18:32:15
tags: [JavaScript]
categories: JavaScript
let 命令
- let所聲明的變量只在其所在的代碼塊內(nèi)有效漾脂,比如for循環(huán)的計(jì)數(shù)器就很適合使用let命令。
- 不存在變量提升
- 暫時(shí)性死區(qū):使用let命令聲明變量完成之前,該變量都是不可用的。
- 在相同作用域中不允許重復(fù)聲明同一個(gè)變量
const 命令
let與const都是只在聲明所在的塊級(jí)作用域內(nèi)有效入挣。
- 聲明一個(gè)只讀常量绿店,一旦聲明继低,常量的值就不能改變。
- 實(shí)際上const保證的并不是變量的值不得改動(dòng),而是變量指向的那個(gè)內(nèi)存地址不得改動(dòng)心褐。
- 對(duì)于簡(jiǎn)單類型的數(shù)據(jù),值就保存在變量指向的那個(gè)內(nèi)存地址笼踩。
- 而對(duì)于復(fù)合類型的數(shù)據(jù)逗爹,變量指向的內(nèi)存地址,保存的只是一個(gè)指針嚎于,const保證這個(gè)指針固定掘而,而它指向的數(shù)據(jù)結(jié)構(gòu)是不能控制的。
舉例:
const a; // 報(bào)錯(cuò)于购,一旦聲明變量就應(yīng)該立即賦值
const b = 2;
b = 3 // 報(bào)錯(cuò)袍睡,聲明后不能重新賦值
const array1 = [];
array1 = [1,2,3] // 報(bào)錯(cuò),數(shù)組是復(fù)合類型肋僧,指向的地址不能發(fā)生改變斑胜,應(yīng)始終指向[]所在的地址控淡,而[1,2,3]與[]不是同一個(gè)地址
const array2 = [];
array2[0] = 1
array2[1] = 2
array2[2] = 3 // 不報(bào)錯(cuò),array2指向的地址不變止潘,改變的只是其內(nèi)部數(shù)據(jù)