ES6 - let、const与作用域
一、let 1.1 學(xué)習(xí)let,首先我們來看一段代碼:
function test(){for(var i=0;i<3;i++){console.log(i) //1,2}console.log(i) //3 }test(); 復(fù)制代碼這組代碼中,我們使用的是var來聲明變量來循環(huán),所以在循環(huán)內(nèi)打印出1,2。在循環(huán)外打印出3,這個(gè)應(yīng)該都是可以理解的。下面來看下let的區(qū)別:
function test(){for(let i=0;i<3;i++){console.log(i) //1,2}console.log(i) // Uncaught ReferenceError:i is not defined 引用錯(cuò)誤 }test(); 復(fù)制代碼在這里,我們可以看到瀏覽器報(bào)了引用錯(cuò)誤---Uncaught ReferenceError,那為什么會(huì)報(bào)引用錯(cuò)誤呢,這里就涉及到標(biāo)題中提到的作用域的問題。在ES6中,有一個(gè)新的概念, 塊作用域
1.2 塊作用域:
代碼用{}包裹,就是一個(gè)塊作用域
所以 ---- let 聲明的變量只在自己所在的塊作用域中有效,const方法定義的常量也有這樣的概念。
一般我們console.log()一個(gè)未聲明的變量,會(huì)報(bào)undefined錯(cuò)誤,那我們這里為什么會(huì)報(bào)引用錯(cuò)誤呢,不是定義錯(cuò)誤?
如果使用了es6,強(qiáng)制開啟了嚴(yán)格模式,在es5中使用"use strict"; 嚴(yán)格模式中,變量未聲明不能使用,不然就會(huì)報(bào)引用錯(cuò)誤
1.3 let 重復(fù)聲明同一個(gè)變量
function test(){let a = 1;let a =2; // Duplicate declaration "a" 重復(fù)聲明 a } test() 復(fù)制代碼所以使用let在同一個(gè)作用域不能重復(fù)聲明同一個(gè)變量。
二、const
2.1 常量
在es5中是沒有常量的概念的,在es6中引入了const常量。來看一個(gè)案例:
function test(){const PI = 3.14;PI = 8 //"PI" is read-onlyconsole.log(PI); } test() 復(fù)制代碼這里聲明了一個(gè)常量 PI ,下面我們給PI重新賦值,這個(gè)時(shí)候?yàn)g覽器就會(huì)報(bào) "PI" is read-only 錯(cuò)誤,這個(gè)錯(cuò)誤的意思就是 PI 只是一個(gè)可讀屬性不能修改。但其實(shí)這句話是不嚴(yán)謹(jǐn)?shù)?#xff0c;后面我們會(huì)做出解釋。
2.2 Unexpected token 這個(gè)標(biāo)題我想大家都認(rèn)識(shí),是一個(gè)錯(cuò)誤提示,那const什么情況下會(huì)出現(xiàn)這樣的錯(cuò)誤提示呢
function test(){const PI ; // Unexpected token (輸入的不完整)PI = 8; } test() 復(fù)制代碼我們先定義了PI常量,但是沒有給它賦值,后面我們才賦值為8,但是在瀏覽器中,出錯(cuò)了,在定義的位置,報(bào)**Unexpected token (輸入的不完整)** , const 聲明的時(shí)候是必須賦值,不然就會(huì)報(bào)錯(cuò),大家要記住哦。
2.3“修改”const 常量 看到標(biāo)題大家可能都比較疑惑啊,之前還說不能修改常量的值,現(xiàn)在怎么變了。其實(shí)我們的修改是引號(hào)引起來的,所以就不是真正的修改了常量,只是看起來是這樣而已。
function test(){const PI = 3.14; const k = {a:1};k.b = 3; // console.log(PI, k); // 3.14 a:1,b:3 } test() 復(fù)制代碼在這部分代碼中,我們定義了k對(duì)象,然后給k添加了b = 3;這個(gè)時(shí)候我們發(fā)現(xiàn),并沒有報(bào)錯(cuò),那是為什么呢?
對(duì)象允許修改屬性,數(shù)值等基本類型不允許修改,對(duì)象返回的是內(nèi)存指針,指針不變,就還是同一個(gè)對(duì)象,這個(gè)也是對(duì)象中一個(gè)知識(shí)點(diǎn),所以我們只是改變了對(duì)象中的內(nèi)容,但是指針不變,也就不存在修改個(gè)這個(gè)常量了。
下一期,我們來說說 解構(gòu)賦值
總結(jié)
以上是生活随笔為你收集整理的ES6 - let、const与作用域的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js基础(数组)--数组类型、类数组对象
- 下一篇: 第 3 章 镜像 - 010 - bas