91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript ES6中箭頭函數注意細節有哪些

發布時間:2021-08-11 11:52:56 來源:億速云 閱讀:127 作者:小新 欄目:web開發

小編給大家分享一下javascript ES6中箭頭函數注意細節有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前言

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繼承自外圍作用域的值,因此我們不能改變其指向。

以上是“javascript ES6中箭頭函數注意細節有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扎赉特旗| 中宁县| 牡丹江市| 新疆| 甘肃省| 徐汇区| 大兴区| 游戏| 靖远县| 渭南市| 武穴市| 兰西县| 平塘县| 安溪县| 康马县| 泉州市| 镇康县| 五原县| 株洲市| 乃东县| 刚察县| 苏尼特右旗| 河北区| 北票市| 宁波市| 徐汇区| 淮北市| 图们市| 铜鼓县| 桦南县| 蛟河市| 甘泉县| 高唐县| 张家港市| 万荣县| 龙胜| 綦江县| 呼玛县| 麦盖提县| 崇阳县| 肇源县|