您好,登錄后才能下訂單哦!
小編給大家分享一下es6函數(shù)的擴展示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
本篇文章給大家?guī)淼膬?nèi)容是關(guān)于es6函數(shù)的擴展介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
函數(shù)參數(shù)的默認值
我們都知道聲明函數(shù)可以設(shè)置形參,但你有沒有想過形參也可以直接設(shè)置默認值,我們接下來看看如何去寫
代碼
function f(x,y=2) { return x+y } console.log(f(2)) // 4
上面的小例子只是設(shè)置了一個y的默認值2,然后我們使用這個函數(shù)的時候,只傳遞了x的參數(shù)2,所以我們會得到4,如果我們給y傳遞參數(shù)1呢?我們會得到什么樣的結(jié)果,繼續(xù)看下面的例子
function f(x,y=2) { return x+y } console.log(f(2,1)) // 3
我們會得到3,因為你傳遞實參的話會替換默認值,更多的例子需要大家自己去實驗?。?!
function f(x,x,y=2) { return x+y } console.log(f(2,2, 1)) // 報錯
上面的例子會報錯,因為我們不能設(shè)置相同的參數(shù)
let x = 3 function f(x,y=x) { return x+y } console.log(f(2)) var x = 3 function f(x,y=x) { return x+y } console.log(f(2)) function f(x,y=x) { console.log(x,y) // 2 2 var x = 3 console.log(x,y) // 3 2 return x+y } console.log(f(2)) // 5
上面三個例子是函數(shù)參數(shù)作用域的例子,我們來看一下第一個和第二個例子函數(shù)默認值會有一個自己單獨的作用域,所以我們在外面聲明修改的x是不會起作用的,但是第三個例子我們在函數(shù)內(nèi)部修改x,我們可以看一看我們打印的值可以看的未聲明之前我們的x,y都是2,這里沒有變量提升,聲明下面x則變成了3,y依舊不變,所以得到5
官方注解:ES6 引入 rest 參數(shù)(形式為...變量名),用于獲取函數(shù)的多余參數(shù),這樣就不需要使用arguments對象了。rest 參數(shù)搭配的變量是一個數(shù)組,該變量將多余的參數(shù)放入數(shù)組中
代碼
function f(...x) { console.log(x) // [1,2,3] } f(1,2,3)
上面的例子我們會得到一個數(shù)組,這正和它定義的一樣它會把多余的變量一起放到一個數(shù)組里面
function f(arr,y,...x) { console.log(x) } function f(arr,...x,y) { }
上面的兩個例子第一個可以執(zhí)行并可以得到自己想要的結(jié)果,第二個則會執(zhí)行報錯,因為rest參數(shù)只能放到最后一個參數(shù)位置使用
嚴格模式下rest如何去使用?
從Es5開始函數(shù)內(nèi)已經(jīng)可以定義嚴格模式了,但Es6規(guī)定函數(shù)參數(shù)默認值定義嚴格模式會報錯,但也要看嚴格模式定義在局部還是全局
嚴格模式不懂的可以去看看了解
嚴格模式
代碼
function fn(a=5) { 'use strict'; console.log(a) } fn()
上面這個例子我們在函數(shù)內(nèi)部設(shè)置了嚴格模式但是它并沒有我們?nèi)缙诘哪菢臃祷亟Y(jié)果,而是報錯了。我們來看一看官方解釋:函數(shù)內(nèi)部的嚴格模式,同時適用于函數(shù)體和函數(shù)參數(shù)。但是,函數(shù)執(zhí)行的時候,先執(zhí)行函數(shù)參數(shù),然后再執(zhí)行函數(shù)體。也就是說在函數(shù)內(nèi)部定義嚴格模式,函數(shù)參數(shù)是先執(zhí)行的函數(shù)體后執(zhí)行(不定義嚴格模式也是先執(zhí)行函數(shù)參數(shù)),這樣在函數(shù)體驗證參數(shù)是否為嚴格模式則為不合理存在
那我們該怎么避免這樣的錯誤呢?
代碼
'use strict'; function fn2(a=5) { console.log(a) } fn2() function fn() { 'use strict'; return function (a=5) { console.log(5) } } fn()() // 5
我們可以在全局定義嚴格模式,或是在一個函數(shù)內(nèi)部定義然后返回一個帶參數(shù)的函數(shù),這樣就可以繞過執(zhí)行函數(shù)參數(shù),執(zhí)行函數(shù)體的時候不會報錯
官方注解: 函數(shù)的name屬性,返回該函數(shù)的函數(shù)名 使用方式 函數(shù)名.name
代碼
function a() { } console.log(a.name) // a function b() { } console.log(b.name) // a
上面兩個例子通過使用name屬性我們會得到函數(shù)的名字,當然Es5也能使用,大家可以去嘗試在Es6環(huán)境和Es5環(huán)境測試一下
let fn = a => a console.log(fn(10)) // 10 // 對比 let fn1 = function (a) { return a } console.log(fn1(10)) //10 let fn2 = (a,b) => a+b console.log(fn2(1,2)) // 對比 let fn21 = function (a,b) { return a+b } console.log(fn2(1,2))
我們可以看看上面的箭頭函數(shù)與Es5中我們常用書寫的函數(shù)的區(qū)別,就是大大縮減英文字母的編寫而且變得更簡潔了,其實箭頭函數(shù)和普通函數(shù)作用都差不多,而且簡單易懂,可以相互嵌套,對于自己代碼整潔度非常有幫主,鼓勵大家多使用箭頭函數(shù),那么箭頭函數(shù)也有幾個注意點需要大家記住
通俗的解釋:就是在函數(shù)中最后一步調(diào)用函數(shù)
代碼
let fn = () => { console.log(123) return () => 5 } console.log(fn()()) // 123 5
尾遞歸
let fn = (a,b) => { if(a===b) return b console.log(1) return fn(a+1, b) } console.log(fn(1,5))
在函數(shù)內(nèi)部最后一步進行遞歸調(diào)用本身,從而達到遞歸的效果
Es7中允許函數(shù)形參最后一個帶有逗號,以前都是不允許帶有逗號的 let fn = (a,) => { console.log(a) } fn(1)
上面一個例子我們在參數(shù)的后面加了一個逗號,執(zhí)行結(jié)果之后發(fā)現(xiàn)可以正常運行,但是我在es6環(huán)境下也是不會報錯的試了下es5也不報錯,大家可以在去試試、
函數(shù)的擴展就到這里了,最主要需要我們學的就是箭頭函和rest參數(shù)傳值,以及嚴格模式下函數(shù)的運作
以上是“es6函數(shù)的擴展示例”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。