ES6 引入rest參數(「...變量名」),用於獲取函數的多餘參數,這樣就不須要使用arguments對象了。rest參數搭配的變量是一個數組,該變量將多餘的參數放入數組中。javascript
function add(...values) { let sum = 0; for (var val of values) { sum += val; } return sum; } add(2, 5, 3) // 10
新增了擴展運算符三個點(...),用於將一個數組轉爲用逗號分隔的參數序列。java
console.log(...[1, 2, 3])// 1 2 3
新增函數的name屬性,返回該函數的函數名。數組
function foo() {} console.log(foo.name);// "foo"
ES6容許使用「箭頭」(=>)定義函數。這裏重點講解。
6.1. 箭頭函數是什麼?閉包
箭頭函數使函數定義簡潔化 ```javascript var f = () => 'It's a test.'; ``` 與 ```javascript var f = function (){ return 'It's a test.' } ``` 是同樣的意思。
6.2. 箭頭函數有什麼做用?函數
在ES5的時候,函數this的值和調用這個函數的上下文有關。 當咱們在js裏寫了閉包,匿名函數等,this指向會發生改變,致使 沒法找到對應做用域的相關變量或函數。以setTimeout爲例: ```javascript var test='測試'; function f() { setTimeout(function(){ console.log(this.test); }, 100); } f.call({test:'哈哈'});//測試 ``` 以上輸出的結果是測試,setTimeout是在全局做用域下執行的,this指向的是全局 window,而window上test的值爲"測試",因此輸出的是測試。 ```javascript var test='測試'; function f() { setTimeout(() => { console.log(this.test); }, 100); } f.call({test:'哈哈'});//哈哈 ``` 以上輸出的結果是哈哈,setTimeout是在全局做用域下執行的,this指向的是全局 window,而箭頭函數致使this老是指向函數定義生效時所在的對象,這裏是指 {test:'哈哈'},因此輸出的是哈哈。 因而可知箭頭函數可讓this指向固定化,this在定義的時候就肯定好的,之後 無論怎麼調用這個箭頭函數,箭頭函數的this始終爲定義時的this,這種特性很 有利於封裝回調函數。
6.3 箭頭函數使用注意點?學習
6.3.1 不可使用arguments對象,該對象在函數體內不存在。 6.3.2 不綁定this。 6.3.3 不能夠看成構造函數,也就是說,不可使用new命令。 6.3.4 不可使用yield命令,所以箭頭函數不能用做Generator函數。