在es6之前,我們都是用var
關鍵字宣告變數。無論宣告在何處,都會被視為宣告在函式的最頂部(不在函式內即在全域性作用域的最頂部)。這就是函式變數提公升例如:
function
aa() else
}
以上的**實際上是:
function
aa() else
//此處訪問test 值為undefined
}
所以不用關心bool是否為true
orfalse
。實際上,無論如何test都會被建立宣告。
接下來es6主角登場:
我們通常用let
和const
來宣告,let
表示變數、const
表示常量。let
和const
都是塊級作用域。怎麼理解這個塊級作用域?
說白了{}大括號內的**塊即為看以下**:let
和const
的作用域。
function
aa() else
}
let
的作用域是在它所在當前**塊,但不會被提公升到當前函式的最頂部。
再來說說const
const
宣告的變數都會被認為是常量,意思就是它的值被設定完成後就不能再修改了。
const name = 'lux'
name = 'joe'
//再次賦值此時會報錯
還有,如果const
的是乙個物件,物件所包含的值是可以被修改的。抽象一點兒說,就是物件所指向的位址沒有變就行。
const student =
// 沒毛病
student.name = 'yy'
// 如果這樣子就會報錯了
student =
說一道面試題
var funcs =
for (var i = 0; i < 10; i++) )
}funcs.foreach(function(func) )
這樣的面試題是大家常見,很多同學一看就知道輸出 10 十次
但是如果我們想依次輸出0到9呢?
有兩種解決方法。直接看一下**。
// es5告訴我們可以利用閉包解決這個問題
var funcs =
for (var i = 0; i < 10; i++)
})(i))}
funcs.foreach(function(func) )
// 再來看看es6怎麼處理的
const funcs =
for (let i = 0; i < 10; i++) )
}funcs.foreach(func => func())
達到相同的效果,es6簡潔的解決方案是不是更讓你心動!!!
es6模板字元簡直是開發者的福音啊,解決了es5在字串功能上的痛點。
第乙個用途,基本的字串格式化。將表示式嵌入字串中進行拼接。用${}來界定。
//es5
var name = 'lux'
console.log('hello' + name)
//es6
const name = 'lux'
console.log(`hello $`) //hello lux
第二個用途,在es5時我們通過反斜槓(\)來做多行字串或者字串一行行拼接。es6反引號(``)直接搞定。
// es5
var msg = "hi \
man!
"// es6
const template = `hello world
`
對於字串es6當然也提供了很多厲害也很有意思的方法 es6新特性 ES6新特性(一)
var 1 var宣告的是函式作用域 區域性 但在if for等定義的變數是全域性的 2 var 具有變數提公升,預解析 3 在同乙個作用域下,var可以宣告多次 4 var 宣告的變數會掛載到window上 let1 let不存在變數提公升,在變數使用之前,必須要先宣告 2 let在同一作用域下,...
ES6新特性須知
1.1es5之前函式想要賦預設值var funes5 function a,b,c 1.2es6開始函式想要賦預設值var funes6 function a 50,b 60,c 70 2.1es5之前字串拼接或者拼接屬性值只能如下var a lbj var b 50 var c name a ye...
es6新特性分享
1 字串查詢 es5使用是indexof 返回字元第一次出現的位置int值 es6新增了3個方法 includes startswith endwith 返回bool值 includes 是否包含字元 startswith 首字母是否包含字元 endwith 末尾是否包含字元 2 數值擴充套件 nu...