摘要:關(guān)于的學(xué)習(xí)總結(jié)昨天寫了第一篇,主要是關(guān)于變量聲明關(guān)鍵字和,新增類型以及模板字符串,今天準(zhǔn)備寫第二篇,里面的函數(shù)部分,新增了箭頭函數(shù),參數(shù)以及參數(shù)默認(rèn)值。,這次我們?cè)谡{(diào)用函數(shù)大的時(shí)候,兩個(gè)參數(shù)全部傳遞了值,因此返回。
關(guān)于ES6的學(xué)習(xí)總結(jié),昨天寫了第一篇,主要是關(guān)于變量聲明關(guān)鍵字let和const,新增類型Symbol以及模板字符串,今天準(zhǔn)備寫第二篇,ES6里面的函數(shù)部分,ES6新增了箭頭函數(shù),Rest參數(shù)以及參數(shù)默認(rèn)值。
箭頭函數(shù)
關(guān)于箭頭函數(shù),之所以這么稱呼,是因?yàn)樗褪怯梢粋€(gè)箭頭來定義的,例如:
//ES5 function foo(param){ return param*param; } //ES6 箭頭函數(shù) var foo= param => param*param;
上面的代碼簡(jiǎn)單比較了ES5中普通函數(shù)與ES6箭頭函數(shù)的的寫法,很明顯的可以看出,箭頭函數(shù)顯得更加的簡(jiǎn)便,箭頭函數(shù)中,有一些需要注意的地方:
返回值必須明確,并且在大括弧內(nèi)必須加上return關(guān)鍵字,若是省略大括弧,則可以省略return
//返回值的寫法,下面兩種是一樣的 () => "hello world"; () => { return "hello word"; }
當(dāng)參數(shù)的數(shù)目不止一個(gè)或者沒有的時(shí)候,需要用小括弧()包裹
//沒有參數(shù)或者多個(gè)參數(shù)需要加小括號(hào) var foo1 = () => "hello world"; var foo1 = () => { return "hello word"; } var foo2 = (param1,param2) => param1*param2;
當(dāng)返回的是一個(gè)對(duì)象的時(shí)候,需要注意大括弧外面加上()
//返回對(duì)象需要函數(shù)體外面要加小括號(hào) var foo3 = param => ({key: value})
箭頭函數(shù)中this的使用跟普通函數(shù)也不一樣,在JavaScript的普通函數(shù)中,都會(huì)有一個(gè)自己的this值,主要分為:
函數(shù)作為全局函數(shù)被調(diào)用時(shí),this指向全局對(duì)象
函數(shù)作為對(duì)象中的方法被調(diào)用時(shí),this指向該對(duì)象
函數(shù)作為構(gòu)造函數(shù)的時(shí)候,this指向構(gòu)造函數(shù)new出來的新對(duì)象
還可以通過call,apply,bind改變this的指向
在箭頭函數(shù)中,this屬于詞法作用域,直接由上下文確定,對(duì)于普通函數(shù)中指向不定的this,箭頭函數(shù)中處理this無疑更加簡(jiǎn)單,如下:
//ES5普通函數(shù) function Man(){ this.age=22; return function(){ this.age+1; } } var cala=new Man(); console.log(cala())//undefined //ES6箭頭函數(shù) function Man(){ this.age=22; return () => this.age+1; } var cala=new Man(); console.log(cala())//23
箭頭函數(shù)中沒有arguments(我們可以用rest參數(shù)替代),也沒有原型,也不能使用new 關(guān)鍵字,例如:
//沒有arguments var foo=(a,b)=>{return arguments[0]*arguments[1]} console.log(foo(3,5)) //arguments is not defined //沒有原型 var Obj = () => {}; console.log(Obj.prototype); // undefined //不能使用new 關(guān)鍵字 var Obj = () => {"hello world"}; var o = new Obj(); // TypeError: Obj is not a constructor
Rest參數(shù)
Rest參數(shù)名為剩余參數(shù),以...為前綴,上面講過,ES6的箭頭函數(shù)中不能使用arguments,我們可以用rest參數(shù)來替代,例如:
function foo(){ return arguments.length; } console.log(foo(1,2,3)) // 3 var foo= (...rest) => { return rest.length; } console.log(foo(1,2,3)) // 3
在rest參數(shù)前面若是有其他的形式參數(shù),那么rest參數(shù)只能放在最后面:
var foo = (param1,param2,...rest) => { return param1 + param2 + rest.length; }; console.log(foo(1,2,3,4,5)) // 6 var foo = (param1,...rest,param2) => { return param1 + param2 + rest.length; }; console.log(foo(1,2,3,4,5)) // Rest parameter must be last formal parameter
默認(rèn)參數(shù)值
在ES6以前,函數(shù)調(diào)用時(shí),那些沒有傳遞的參數(shù),JavaScript默認(rèn)為undefined,ES6中新增了參數(shù)默認(rèn)值,允許使用默認(rèn)值來初始化形參
var foo = (param1,param2=10) => { return param1*param2; } console.log(foo(10)) // 100
上面這個(gè)例子可以看到,定義了一個(gè)參數(shù)相乘的簡(jiǎn)單函數(shù),在調(diào)用函數(shù)的時(shí)候,只傳入了第一個(gè)參數(shù)的值,結(jié)果返回100,是因?yàn)樵诤瘮?shù)中第二個(gè)參數(shù)默認(rèn)值為10,若我們?cè)谡{(diào)用函數(shù)的時(shí)候沒有顯式的指明參數(shù)值,則會(huì)默認(rèn)使用參數(shù)默認(rèn)值。
var foo = (param1,param2=10) => { return param1*param2; } console.log(foo(10,20)) // 200
這次我們?cè)谡{(diào)用函數(shù)大的時(shí)候,兩個(gè)參數(shù)全部傳遞了值,因此返回200。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/87265.html
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
摘要:提供了解構(gòu)賦值的方式,這樣子在賦值多個(gè)變量或者進(jìn)行注釋時(shí)可以方便很多,不同場(chǎng)景下也有很多新的應(yīng)用,個(gè)人常使用的有數(shù)組的解構(gòu)賦值,對(duì)象的解構(gòu)賦值和函數(shù)參數(shù)的解構(gòu)賦值,函數(shù)參數(shù)的解構(gòu)賦值之前總結(jié)過,這里寫下數(shù)組的和對(duì)象的簡(jiǎn)單總結(jié)吧函數(shù)參數(shù)的解構(gòu) ES6提供了解構(gòu)賦值的方式,這樣子在賦值多個(gè)變量或者進(jìn)行注釋時(shí)可以方便很多,不同場(chǎng)景下也有很多新的應(yīng)用,個(gè)人常使用的有數(shù)組的解構(gòu)賦值,對(duì)象的解構(gòu)賦...
摘要:前言很認(rèn)真的說吧,在和騰訊面試官的面試的過程。騰訊二面自我介紹二面的面試官和一面不是同一個(gè)面試官,所以在這個(gè)時(shí)候,我的基本介紹還是和一面一樣,介紹自己的基本信息,以及怎么想到學(xué)習(xí)前端和怎么學(xué)習(xí)前端。 前言 很認(rèn)真的說吧,在和騰訊面試官的面試的過程。有點(diǎn)感覺是在聊天一樣,他們是面試官,但是感覺更像是引路人,不管結(jié)果的好壞,在騰訊面試的過程,只要你認(rèn)真去聽去問,就可以學(xué)到很多東西吧。 如果...
摘要:對(duì)于,雖然之前也有過學(xué)習(xí),但總的來說還是不夠系統(tǒng)的,知識(shí)點(diǎn)非常的零碎。因此包括以為基礎(chǔ)產(chǎn)生的語法糖在逐漸的趨近于強(qiáng)類型的語言。是創(chuàng)建,而不是的覆蓋。因而稱之為富一代。所以語法標(biāo)準(zhǔn)的更新將對(duì)良好編程習(xí)慣有著極大的利好。 對(duì)于ES6,雖然之前也有過學(xué)習(xí),但總的來說還是不夠系統(tǒng)的,知識(shí)點(diǎn)非常的零碎?,F(xiàn)在結(jié)合之前遇到的問題把ES6中的知識(shí)點(diǎn)總結(jié)一下。最初接觸ES6時(shí),明白ES5中聲明變量的方式...
閱讀 1258·2021-09-27 13:34
閱讀 1072·2021-09-13 10:25
閱讀 570·2019-08-30 15:52
閱讀 3511·2019-08-30 13:48
閱讀 738·2019-08-30 11:07
閱讀 2230·2019-08-29 16:23
閱讀 2055·2019-08-29 13:51
閱讀 2391·2019-08-26 17:42