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