JavaScript箭頭函數(shù)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
ES6標(biāo)準(zhǔn)新增了一種新的函數(shù):Arrow Function(箭頭函數(shù))。
為什么叫Arrow Function?因?yàn)樗亩x用的就是一個(gè)箭頭:
x => x * x
上面的箭頭函數(shù)相當(dāng)于:
function (x) { return x * x; }
在繼續(xù)學(xué)習(xí)箭頭函數(shù)之前,請(qǐng)測(cè)試你的瀏覽器是否支持ES6的Arrow Function
箭頭函數(shù)相當(dāng)于匿名函數(shù),并且簡(jiǎn)化了函數(shù)定義。箭頭函數(shù)有兩種格式,一種像上面的,只包含一個(gè)表達(dá)式,連{ ... }和return都省略掉了。還有一種可以包含多條語(yǔ)句,這時(shí)候就不能省略{ ... }和return:
x => { if (x > 0) { return x * x; } else { return - x * x; } }
如果參數(shù)不是一個(gè),就需要用括號(hào)()括起來(lái):
// 兩個(gè)參數(shù): (x, y) => x * x + y * y // 無(wú)參數(shù): () => 3.14 // 可變參數(shù): (x, y, ...rest) => { var i, sum = x + y; for (i=0; i<rest.length; i++) { sum += rest[i]; } return sum; }
如果要返回一個(gè)對(duì)象,就要注意,如果是單表達(dá)式,這么寫的話會(huì)報(bào)錯(cuò):
// SyntaxError: x => { foo: x }
因?yàn)楹秃瘮?shù)體的{ ... }有語(yǔ)法沖突,所以要改為:
// ok: x => ({ foo: x })
this
箭頭函數(shù)看上去是匿名函數(shù)的一種簡(jiǎn)寫,但實(shí)際上,箭頭函數(shù)和匿名函數(shù)有個(gè)明顯的區(qū)別:箭頭函數(shù)內(nèi)部的this是詞法作用域,由上下文確定。
回顧前面的例子,由于JavaScript函數(shù)對(duì)this綁定的錯(cuò)誤處理,下面的例子無(wú)法得到預(yù)期結(jié)果:
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(); } };
現(xiàn)在,箭頭函數(shù)完全修復(fù)了this的指向,this總是指向詞法作用域,也就是外層調(diào)用者obj:
var obj = { birth: 1990, getAge: function () { var b = this.birth; // 1990 var fn = () => new Date().getFullYear() - this.birth; // this指向obj對(duì)象 return fn(); } }; obj.getAge(); // 25
如果使用箭頭函數(shù),以前的那種hack寫法:
var that = this;
就不再需要了。
由于this在箭頭函數(shù)中已經(jīng)按照詞法作用域綁定了,所以,用call()或者apply()調(diào)用箭頭函數(shù)時(shí),無(wú)法對(duì)this進(jìn)行綁定,即傳入的第一個(gè)參數(shù)被忽略:
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
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JS中箭頭函數(shù)與this的寫法和理解
- JS箭頭函數(shù)和常規(guī)函數(shù)之間的區(qū)別實(shí)例分析【 5 個(gè)區(qū)別】
- JavaScript中的函數(shù)申明、函數(shù)表達(dá)式、箭頭函數(shù)
- JavaScript基礎(chǔ)之this和箭頭函數(shù)詳析
- JavaScript箭頭函數(shù)中的this詳解
- 深入理解JavaScript 箭頭函數(shù)
- JavaScript函數(shù)式編程(Functional Programming)箭頭函數(shù)(Arrow functions)用法分析
- JavaScript ES6箭頭函數(shù)使用指南
- 淺談箭頭函數(shù)寫法在ReactJs中的使用
- JavaScript哪些場(chǎng)景不能使用箭頭函數(shù)
相關(guān)文章
JavaScript?error瀏覽器端錯(cuò)誤捕獲處理方法筆記解決示例
這篇文章主要為大家介紹了JavaScript?error瀏覽器端錯(cuò)誤捕獲處理方法筆記解決示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Web版彷 Visual Studio 2003 顏色選擇器
Web版彷 Visual Studio 2003 顏色選擇器...2007-01-01前端echarts tooltip展示多項(xiàng)自定義數(shù)據(jù)代碼示例
Echarts是一個(gè)基于JavaScript的開源圖表庫(kù),提供了豐富的圖表類型,如折線圖、柱狀圖、餅圖、散點(diǎn)圖等,支持動(dòng)態(tài)數(shù)據(jù)交互和自定義配置,這篇文章主要給大家介紹了關(guān)于前端echarts tooltip展示多項(xiàng)自定義數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2024-09-09JavaScript 自動(dòng)分號(hào)插入(JavaScript synat:auto semicolon insertion)
今天在看《Extjs中文手冊(cè)》的時(shí)候,寫了四五行樣例代碼,結(jié)果IE和Firefox一直報(bào)錯(cuò)不通過(guò)。2009-11-11JS實(shí)現(xiàn)勻加速與勻減速運(yùn)動(dòng)的方法示例
這篇文章主要介紹了JS實(shí)現(xiàn)勻加速與勻減速運(yùn)動(dòng)的方法,涉及javascript結(jié)合時(shí)間函數(shù)與數(shù)學(xué)運(yùn)算動(dòng)態(tài)操作頁(yè)面元素樣式的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09