ES6新增了塊級作用域,總結一句話大致就是:大括號{}包起來的代碼塊基本山都可以當做塊級作用域。
常見的有
直接使用{}包起來:
{ var a = 4 }函數體大括號,if-else大括號,for循環大括號,switch大括號,try-catch大括號等。 需要注意的是,for循環,每一次循環時的{}都是一個獨立的塊級作用域。
for(let i=0; a < 5; i++){ let j = i }上面代碼循環了五次,實際上有五個獨立的j。
日常開發中,我們就可以利用這個特性,來創建塊級作用域了。
使用let或const聲明的變量只在當前塊級作用域生效,出了這個代碼塊,就無法訪問。
{ let a = 5 }console.log(a) // Uncaught ReferenceError: a is not defined日常開發中,塊級作用域中使用的變量,盡量使用let或者const聲明。
需要注意的問題:
let和const變量一定要先聲明,再使用,避免出錯。不要試圖利用變量提升的特性。
const聲明變量時,一定要初始化,否則會報錯。let建議也在聲明時初始化。
const聲明的變量一旦初始化,以后就不可以在進行賦值操作,但可以對其引用的對象進行更改。
const noChangeMe; // Uncaught SyntaxError: Missing initializer in const declaration const noChangeMe = [1,2,4] noChangeMe = [2, 3] // Uncaught TypeError: Assignment to constant variable noChangeMe[100] = 100 // everything is OK
let和const聲明的變量不能再重復聲明。 雖然var可以無限次重復聲明,但是并不適用于這兩個新的聲明方式。
let a = 1 let a = 2 // Identifier 'a' has already been declared
不要用window.xxx去調用let與const聲明的變量 ES6規定,let、const、class聲明的全局變量,不屬于頂層對象的屬性。
使用反引號”`”
使用``將字符串包起來,可以解決下面的問題:
字符串不能換行,如果換行只能使用+號
字符串中的引號如果和最外層相同,需要進行轉義
字符串中插入變量,需要用+號 以前這樣的寫法:
var name = 'world' var str = "小明說:/"hello, " + name + "/"" // 小明說:"hello, world"
現在可以方便的寫作:
var name = 'world' str str = `小明說:"hello, ${name}"`總的來說,有三個好處:
不怕字符串中出現的引號;
不怕換行,反引號包起來的字符串可以隨便換行;
使用${}將變量或表達式包起來直接放在字符串中,不用寫很多+
新聞熱點
疑難解答
圖片精選