国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript ES6中箭頭函數注意細節小結

2024-05-06 15:11:20
字體:
來源:轉載
供稿:網友

前言

ES6標準新增了一種新的函數:Arrow Function(箭頭函數)。

為什么叫Arrow Function?因為它的定義用的就是一個箭頭:

x => x * x

上面的箭頭函數相當于:

function (x) {return x * x;}

但箭頭函數帶來了些許問題,下面來一起看看吧。

關于{}

第一個問題是關于箭頭函數與{}。

箭頭函數,乍一看,用法似乎很簡單,比如像下面這樣用來給數組每一項乘以2:

const numbers = [1, 2, 3]; const result = numbers.map(n => n * 2); // produces [2,4,6]

但是,如果使用不當,可能會引發意想不到的問題。比如下面,嘗試為數組中每一項去產生對象字面量,看上去挺簡單的map操作,還是引發了意外。

const numbers = [1, 2, 3]; const result = numbers.map(n => { value: n }); // produces [undefined], [undefined], [undefined]

什么原因造成的呢?

稍微分析可知,引起上面問題在于,箭頭函數內部包裹在花括號之間的代碼,被認為是一段獨立的代碼塊而不是對象字面量,因此其單獨執行,顯然得到的結果就是一個全為undefined的數組。
于是,在這種情況下,其中的代碼就必須有明確的返回語句或者用圓括號()包括對象字面量。

const result = numbers.map(n => ({ value: n })); // [{value: 1}, {value:2}, {value:3}]

關于this

第二個問題是關于箭頭函數與this。

使用箭頭函數,你可以像下面這樣寫代碼而不用額外在局部作用域中去暫存this:

const adder = {  sum: 0,  add(numbers) {   numbers.forEach(n => {    this.sum += n;   });  } }; adder.add([1, 2, 3]); // adder.sum === 6

然而,很多時候你可能會自以為是的在不經意間寫錯。正如下面的代碼所示,this并不指向”adder”對象,而指向”adder”對象所在的作用域:

const adder = {  sum: 0,  add: (numbers) => { // scope here is important   numbers.forEach(n => {    this.sum += n;   });  } }; adder.add([1, 2, 3]); // adder.sum === 0

最后請記住一點:箭頭函數中的this繼承自外圍作用域的值,因此我們不能改變其指向。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 新营市| 绵竹市| 葫芦岛市| 赣州市| 肇庆市| 乐业县| 仁怀市| 榆林市| 扎鲁特旗| 瑞金市| 长泰县| 汝城县| 平陆县| 甘泉县| 项城市| 吉林省| 钟祥市| 遂昌县| 汽车| 黄梅县| 托克逊县| 鹿邑县| 濮阳市| 越西县| 迁西县| 南昌县| 叙永县| 花莲县| 都江堰市| 江陵县| 社会| 会同县| 长兴县| 屏东市| 南平市| 宜章县| 鱼台县| 凌云县| 启东市| 浙江省| 平阴县|