函式引數的預設值:
在es5中,我們想給函式乙個預設值,需要這樣寫:
function
add(x, y)
在es6中 ,可以這樣寫:
function
add (x, y = 'ss')
add('dd')// ddss
add('ss','dd')//ssdd
add('dd','') //dd
我們只需要在引數上直接寫上我們想要的預設值就好了。
當我們給函式乙個變數的時候,就宣告了乙個變數,我們在函式內部就不可以在用let或const進行宣告:
function
add(x, y = 'aa')
add([1, 2]); // 3
在前面的解構賦值中還有一些例子可以參考。
rest引數
es6中增加了rest引數,其形式為:… 變數名
也就是說在我們不知道引數個數的情況下,就可以使用這種方法:
function
add(...values)
return sum;
}add(2,5,3);
需要注意的是,rest引數一定是最後乙個引數:
function
(a ,...value ,b)
擴充套件運算子
使用方法為:…
console.log(...[1, 2, 3, 4]);
// 1, 2, 3, 4
擴充套件運算子可以用來進行陣列的合併:
var arr1 = [1, 2]
var arr2 = [3, 4]
var arr3 = [5, 6]
var arr4 = [...arr1,...arr2,...arr3]
//arr4 = [1, 2, 3, 4, 5, 6]
const [a,...arr] = [1, 2, 3, 4, 5, 6];
//a = 1 arr = [2, 3, 4, 5, 6]
[...
'hello']
//['h','e','l','l','o']
箭頭函式
es6新增了函式的寫法,箭頭函式,下面是箭頭函式的基本寫法:
const a = y => y
等同於:
const a = function
(y)
如果不需要引數,就這樣寫:
cosnt a = () => y;
如果箭頭函式的**塊多與一行,我們就用大括號包起來:
const
a = (a, b) => ;
如想返回乙個物件,需要用圓括號包起來:
箭頭函式的this是固定的,就指向函式定義是的作用域,不會改變。
尾調函式
尾調函式就是某個函式在最後一步呼叫另乙個函式。
function
a()
這就是乙個最簡單的尾調函式。
那麼為什麼要有尾遞迴這個方法出現那,我在網上看了半天,發現到最後總結起來就是一句話:」顯得高階」。
其實解釋就是,因為函式呼叫函式,會生成呼叫幀,這樣就會占用一些記憶體空間,如果我們採用尾呼叫的方法,就可以避免這個問題出現。
尾遞迴
函式在函式內部呼叫自己,叫做遞迴,函式在尾部呼叫自己,就是尾遞迴,由於上面的原因,尾遞迴可以大大的減少對記憶體的占用,是**的執行效率更高。
下面是兩個例子:
function
factorial
(n)
factorial(5) // 120
這個是正常的遞迴呼叫,我們給他改為尾遞迴:
function
factorial
(n, total)
factorial(5, 1) // 120
他們倆個的區別就是,乙個是將自身用於計算;乙個返回了自身,將計算的步驟放在了引數裡。
還有乙個著名的演算法,斐波納西數列:
正常的話是這樣寫:
function
fibonacci
(n) ;
return fibonacci(n - 1) + fibonacci(n - 2);
}
運用尾遞迴就要這樣寫:
function
fibonacci2
(n , ac1 = 1 , ac2 = 1) ;
return fibonacci2 (n - 1, ac2, ac1 + ac2);
}
是不是覺得**難理解了,尾遞迴的優化寫法有好多,但是我發現只有es6的寫法是最簡單易懂的,因為es6提供了預設的引數值:
function
factorial
(n, total = 1)
這個與上面的第乙個例子一樣,計算乙個數的階乘。 ES6 函式擴充套件
函式在js裡是相當重要的一部分了,es6裡也新增了一些函式方法,來看一下 test hello hello world test hello kill hello kill es6增加了函式引數預設值,可以直接在宣告引數的同時賦預設值,但是也可以後面重新賦值 test2 kill 括號內有引數x時,...
ES6函式擴充套件
function fun a,b world fun hello 輸出helloworld let a aa function fun a,b a fun bb function fun arg fun 1,2,3,4,1 語法 param param 對應函式 function 沒有引數 乙個引數...
ES6 函式擴充套件
函式新增特性 test hello hello world test hello kill hello kill 首先我們看上面的 函式預設值就是引數含有預設值的函式,此例子中y是有預設值的,值是world,所以我們在呼叫的時候,如果沒有給定第二個引數,輸出的結果是hello world,如果給了第...