国产探花免费观看_亚洲丰满少妇自慰呻吟_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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 出国| 合作市| 东丰县| 天柱县| 循化| 岳池县| 慈溪市| 沐川县| 灌南县| 镇雄县| 雷波县| 疏附县| 大厂| 大同县| 大名县| 合作市| 错那县| 井研县| 饶阳县| 平舆县| 平罗县| 泗洪县| 德钦县| 中西区| 昔阳县| 剑川县| 旬邑县| 台湾省| 昌都县| 万源市| 禹城市| 建瓯市| 新乡县| 于都县| 汪清县| 张家界市| 密山市| 广丰县| 库伦旗| 元江| 红安县|