一、let1.1 學習let,首先我們來看一段**:
function
test
() console.log(i) //3
}test();
複製**
這組**中,我們使用的是var來宣告變數來迴圈,所以在迴圈內列印出1,2。在迴圈外列印出3,這個應該都是可以理解的。下面來看下let的區別:
function
test
() 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
()test()
複製**
所以使用let在同乙個作用域不能重複宣告同乙個變數。
二、const
2.1 常量
在es5中是沒有常量的概念的,在es6中引入了const常量。來看乙個案例:
function
test
()test()
複製**
這裡宣告了乙個常量 pi ,下面我們給pi重新賦值,這個時候瀏覽器就會報"pi" is read-only
錯誤,這個錯誤的意思就是 pi 只是乙個可讀屬性不能修改。但其實這句話是不嚴謹的,後面我們會做出解釋。
2.2 unexpected token這個標題我想大家都認識,是乙個錯誤提示,那const什麼情況下會出現這樣的錯誤提示呢
function
test
()test()
複製**
我們先定義了pi常量,但是沒有給它賦值,後面我們才賦值為8,但是在瀏覽器中,出錯了,在定義的位置,報**unexpected token (輸入的不完整)
** , const 宣告的時候是必須賦值,不然就會報錯,大家要記住哦。
2.3「修改」const 常量看到標題大家可能都比較疑惑啊,之前還說不能修改常量的值,現在怎麼變了。其實我們的修改是引號引起來的,所以就不是真正的修改了常量,只是看起來是這樣而已。
function
test
(); k.b = 3; //
console.log(pi, k); // 3.14 a:1,b:3
}test()
複製**
在這部分**中,我們定義了k物件,然後給k新增了b = 3;這個時候我們發現,並沒有報錯,那是為什麼呢?
物件允許修改屬性,數值等基本型別不允許修改,物件返回的是記憶體指標,指標不變,就還是同乙個物件,這個也是物件中乙個知識點,所以我們只是改變了物件中的內容,但是指標不變,也就不存在修改個這個常量了。下一期,我們來說說解構賦值
ES6 let,const 用法雜談
es6 ecma 標準 發布於2015年6月 作用域 var 全域性 let 函式作用域 也叫塊級作用域 用 表示 let使用注意點 1.沒有預解析,不存在變數提公升。例 如果console.log a 在我們定義的let a 之前的話就報錯,而var 定義的則是undefined.console....
前端基礎ES6 let const
let具有作用域的 示例 lang en charset utf 8 name viewport content width device width,initial scale 1.0 documenttitle head var 宣告的變數往往會越域 let宣告的變數有嚴格的作用域 consol...
es6學習 塊級作用域let const
先安裝node 新建1.js檔案,通過node的 cmd進入本地檔案1.js 執行 node 1.js 可以測試以下 1.基本用法 let 宣告變數,只在塊級作用域有效。console.log a a is not defined console.log b 2 在for 迴圈中使用,迴圈和迴圈內部...