ES6新增語法—函數(shù)和參數(shù)
箭頭函數(shù)
箭頭函數(shù):將原來函數(shù)的function關(guān)鍵字和函數(shù)名都刪掉,并使用”=>”連接參數(shù)列表和函數(shù)體。
箭頭函數(shù)語法:
(參數(shù)1,參數(shù)2)=>{
函數(shù)體
}
注意點(diǎn):
- 當(dāng)參數(shù)有且只有一個(gè),括號(hào)可以省略。沒有參數(shù)或多個(gè)參數(shù)時(shí),括號(hào)不能省略。
- 如果函數(shù)體有且只有一個(gè)表達(dá)式時(shí),可以省略花括號(hào)。
箭頭函數(shù)使用實(shí)例:
- window.onload = ()=>{
- console.log('網(wǎng)頁加載完成')
- }
參數(shù)只有一個(gè)時(shí),省略掉括號(hào)。函數(shù)體只有一個(gè)表達(dá)式,花括號(hào)也省略。如:
- let arr=[1,2,3,4]
- arr.forEach((item)=>
- console.log('item',item)
- )
This指向問題
1、在全局環(huán)境下,this始終指向全局對(duì)象,無論是否嚴(yán)格模式。
2、普通函數(shù)內(nèi)部的this分嚴(yán)格模式和非嚴(yán)格模式。
- 嚴(yán)格模式下this為undefined。
- 非嚴(yán)格模式下,this指向全局對(duì)象window。
3、箭頭函數(shù)的 this 是上下文的this。
箭頭函數(shù)相當(dāng)于匿名函數(shù),并且簡化了函數(shù)定義,但箭頭函數(shù)和匿名函數(shù)有個(gè)明顯的差異,箭頭函數(shù)內(nèi)部的this是詞法作用域,上下文的this值作為自己的this值。
- Call()、apply()、bind()方法對(duì)于箭頭函數(shù)只是傳入?yún)?shù),對(duì)它的this毫無影響。
- 考慮到this是詞法層面上的,嚴(yán)格模式中與this相關(guān)的規(guī)則都將被忽略。
放在setTimeout中的兩個(gè)箭頭函數(shù)返回的this舉例。
- function Person(name,age){
- this.name = name;
- this.age = age;
- setTimeout(()=>{
- console.log('this',this) //Person {name: "倩倩", age: 18}
- },100)
- }
- let p = new Person('倩倩',18)
- setTimeout(()=>{
- console.log("this",this)//Window {window: Window, self: Window, document: document, name: "", location: Location, …}
- },1000)
函數(shù)參數(shù)的默認(rèn)值
在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采取變通措施。
實(shí)例:普通函數(shù)給參數(shù)設(shè)置默認(rèn)值
- function sum(a,b){
- a = a | 12;
- b = b | 5;
- return a+b
- }
- console.log('相加等于',sum())
ES6允許函數(shù)參數(shù)設(shè)置默認(rèn)值,即直接寫在參數(shù)定義的后面。如
- function sum(a=12,b=5){
- return a+b
- }
- console.log('相加等于',sum())
ES6默認(rèn)參數(shù)優(yōu)點(diǎn):
- 簡潔,適用于參數(shù)多的時(shí)候,方便設(shè)置默認(rèn)值。
- 閱讀代碼的人可以看出哪些參數(shù)是可以省略的,不用查看函數(shù)體或文檔。
- 有利于代碼的優(yōu)化,即使未來版本拿掉這個(gè)參數(shù),以前代碼也可以運(yùn)行,還有參數(shù)變量是默認(rèn)聲明的,不能在函數(shù)體內(nèi)部再進(jìn)行聲明。
與結(jié)構(gòu)賦值結(jié)合使用
- function add({x=1,y=2}={}){
- return x+y
- }
- console.log('相加等于',add({x:2})) // 相加等于 4
ES6函數(shù)不定參數(shù)和展開運(yùn)算符
不定參數(shù):
語法:...
類型:數(shù)組
作用:指定多個(gè)各自獨(dú)立的參數(shù),通過整合后的數(shù)組來訪問。
限制:
- 最多只能聲明一個(gè)
- 只能放在參數(shù)末尾
實(shí)例:簡單應(yīng)用
- function show( a, ...args){
- console.log('a',a)
- console.log('args',...args)
- }
- show(1,2,3)
展開運(yùn)算符:
語法:...
作用:指定數(shù)組或?qū)ο?,將他們打散后作為各自?dú)立的參數(shù)。
實(shí)例:使用展開運(yùn)算符展開數(shù)組。
- let arr = ['a','b','c']
- let arr2 = []
- arr2.push(...arr)
- console.log('arr2',arr2)
實(shí)例:使用展開運(yùn)算符展開對(duì)象。
- let person = {
- name :'倩倩',
- age:18
- }
- let worker = {
- ...person,
- job:"打雜"
- }
- console.log('worker',worker)