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

首頁 > 編程 > JavaScript > 正文

JavaScript箭頭函數_動力節點Java學院整理

2019-11-19 16:13:55
字體:
來源:轉載
供稿:網友

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

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

x => x * x

上面的箭頭函數相當于:

function (x) { return x * x;}

在繼續學習箭頭函數之前,請測試你的瀏覽器是否支持ES6的Arrow Function

箭頭函數相當于匿名函數,并且簡化了函數定義。箭頭函數有兩種格式,一種像上面的,只包含一個表達式,連{ ... }和return都省略掉了。還有一種可以包含多條語句,這時候就不能省略{ ... }return

x => { if (x > 0) {  return x * x; } else {  return - x * x; }}

如果參數不是一個,就需要用括號()括起來:

// 兩個參數:(x, y) => x * x + y * y// 無參數:() => 3.14// 可變參數:(x, y, ...rest) => { var i, sum = x + y; for (i=0; i<rest.length; i++) {  sum += rest[i]; } return sum;}

如果要返回一個對象,就要注意,如果是單表達式,這么寫的話會報錯:

// SyntaxError:x => { foo: x }

因為和函數體的{ ... }有語法沖突,所以要改為:

// ok:x => ({ foo: x })

this

箭頭函數看上去是匿名函數的一種簡寫,但實際上,箭頭函數和匿名函數有個明顯的區別:箭頭函數內部的this是詞法作用域,由上下文確定。

回顧前面的例子,由于JavaScript函數對this綁定的錯誤處理,下面的例子無法得到預期結果:

var obj = { birth: 1990, getAge: function () {  var b = this.birth; // 1990  var fn = function () {   return new Date().getFullYear() - this.birth; // this指向window或undefined  };  return fn(); }};

現在,箭頭函數完全修復了this的指向,this總是指向詞法作用域,也就是外層調用者obj

var obj = { birth: 1990, getAge: function () {  var b = this.birth; // 1990  var fn = () => new Date().getFullYear() - this.birth; // this指向obj對象  return fn(); }};obj.getAge(); // 25

如果使用箭頭函數,以前的那種hack寫法:

var that = this;

就不再需要了。

由于this在箭頭函數中已經按照詞法作用域綁定了,所以,用call()或者apply()調用箭頭函數時,無法對this進行綁定,即傳入的第一個參數被忽略:

var obj = { birth: 1990, getAge: function (year) {  var b = this.birth; // 1990  var fn = (y) => y - this.birth; // this.birth仍是1990  return fn.call({birth:2000}, year); }};obj.getAge(2015); // 25

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临猗县| 巢湖市| 黑山县| 阿拉尔市| 盱眙县| 韶关市| 五家渠市| 扶余县| 普兰县| 祥云县| 麻阳| 将乐县| 开封县| 三河市| 昂仁县| 杂多县| 海晏县| 灌云县| 巩留县| 乐至县| 渑池县| 盖州市| 明溪县| 攀枝花市| 清丰县| 来宾市| 米林县| 西林县| 樟树市| 连城县| 乐山市| 红原县| 金门县| 碌曲县| 兴仁县| 枣强县| 托里县| 哈尔滨市| 高阳县| 鄂托克前旗| 名山县|