摘要:特性介紹箭頭函數(shù)是新增的特性之一,它為這門(mén)語(yǔ)言提供了一種全新的書(shū)寫(xiě)函數(shù)的語(yǔ)法。用生成的函數(shù)會(huì)定義一個(gè)自己的,而箭頭函數(shù)沒(méi)有自己的,而是會(huì)和上一層的作用域共享。
本文同步自我得博客:http://www.joeray61.com
JS中的箭頭箭頭在JS里并不算是個(gè)新鮮的玩意兒,一直以來(lái),JS都支持-->這樣的箭頭。
很早的時(shí)候有些瀏覽器還不支持JS,當(dāng)時(shí)的人們?yōu)榱思嫒葸@些瀏覽器,需要這樣寫(xiě)JS:
這段代碼在不支持JS的瀏覽器里會(huì)被解讀成2個(gè)未知標(biāo)簽和一段html注釋。在支持JS的瀏覽器里,JS引擎會(huì)把看成是單行注釋的開(kāi)始。需要說(shuō)明的是,-->僅僅是在一行的開(kāi)頭才能表示這一行是注釋,其余情況-->是一個(gè)操作符,表示goes to的含義。
function countdown(n) { while (n --> 0) { alert(n); } }
這段代碼確實(shí)能夠正常運(yùn)行哦。當(dāng)你給countdown函數(shù)傳入一個(gè)大于0的參數(shù)時(shí),這個(gè)循環(huán)能夠一直運(yùn)行,直到n變?yōu)?為止。
此箭頭非彼箭頭,以上講述的-->并不是我們今天要講的主角,大家權(quán)當(dāng)拓展下JS知識(shí),下面讓我們進(jìn)入正題。
特性介紹箭頭函數(shù)是ES6新增的特性之一,它為JS這門(mén)語(yǔ)言提供了一種全新的書(shū)寫(xiě)函數(shù)的語(yǔ)法。
// ES5 var double = nums.map(function (v) { return 2 * n; }); // ES6 var double = nums.map(v => 2 * n);
箭頭函數(shù)簡(jiǎn)化了原先的函數(shù)語(yǔ)法,不需要再寫(xiě)function,如果函數(shù)體只有一行代碼的話連return都不用寫(xiě),這個(gè)特性對(duì)于熱衷于簡(jiǎn)化流程和工作的程序員來(lái)說(shuō)相當(dāng)對(duì)胃口。
使用箭頭函數(shù)有幾個(gè)注意點(diǎn):
函數(shù)體箭頭函數(shù)支持兩種模式的函數(shù)體寫(xiě)法,我們姑且叫他簡(jiǎn)潔函數(shù)體和塊級(jí)函數(shù)體。
// 簡(jiǎn)潔函數(shù)體 var fn = x => x * x; // 塊級(jí)函數(shù)體 var fn = (x, y) => {return x + y;};
簡(jiǎn)介函數(shù)體默認(rèn)會(huì)把表達(dá)式的結(jié)果返回,塊級(jí)函數(shù)體需要手動(dòng)return。如果想要返回一個(gè)對(duì)象又想使用簡(jiǎn)潔函數(shù)體的話,需要這么寫(xiě):
var fn = () => ({}); fn(); // {}
如果寫(xiě)成var fn = () => {};,那么執(zhí)行fn()只能返回undefined。
this用function生成的函數(shù)會(huì)定義一個(gè)自己的this,而箭頭函數(shù)沒(méi)有自己的this,而是會(huì)和上一層的作用域共享this。
function Person() { this.age = 0; var self = this; setTimeout(function () { self.age++; console.log(self.age); }, 1000); } var p = new Person();
這段代碼里,setTimeout的參數(shù)function中需要操作外層的age屬性,必須要把this賦值給self,然后通過(guò)self來(lái)獲取到age
如果使用箭頭函數(shù)則省事很多,代碼如下:
function Person() { this.age = 0; setTimeout(() => { this.age++; console.log(this.age); }, 1000); } var p = new Person();apply & call
由于箭頭函數(shù)已經(jīng)綁定了this的值,即使使用apply或者call也不能只能起到傳參數(shù)的作用,并不能強(qiáng)行改變箭頭函數(shù)里的this。
var adder = { x: 1, add1: function (y) { var fn = v => v + this.x; return fn(y); }, add2: function (y) { var fn = v => v + this.x; var whatever = { x: 2 }; return fn.call(whatever, y); } }; adder.add1(1); // 2 adder.add2(1); // 仍然是2arguments
普通函數(shù)里arguments代表了調(diào)用時(shí)傳入的參數(shù),但是箭頭函數(shù)不然,在箭頭函數(shù)中無(wú)法使用arguments
當(dāng)然,ES6中也有辦法可以讓箭頭函數(shù)像普通函數(shù)一樣使用類似于arguments這樣的類數(shù)組對(duì)象
var fn = (...rest) => rest[0]; fn(2); // 2
...rest也是ES6的一個(gè)新特性,之后會(huì)介紹。
不能被new箭頭函數(shù)不能與new關(guān)鍵字一起使用,會(huì)報(bào)錯(cuò)
var Fn = () => { this.a = 1; }; var f = new Fn(); // Error使用場(chǎng)景
在我看來(lái),箭頭函數(shù)幾乎可以完全取代function,除非是函數(shù)需要進(jìn)行遞歸或者需要可變的this對(duì)象,其他場(chǎng)景我認(rèn)為都可以使用箭頭函數(shù)。
參考資料ES6 In Depth: Arrow functions
Arrow functions
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79314.html
摘要:所以,如果一個(gè)數(shù)組成員不嚴(yán)格等于,默認(rèn)值是不會(huì)生效的因?yàn)椴粐?yán)格等于對(duì)象解構(gòu)對(duì)象的解構(gòu)與數(shù)組有一個(gè)重要的不同。數(shù)組的元素是按次序排列的,變量的取值由它的位置決定而對(duì)象的屬性沒(méi)有次序,變量必須與屬性同名,才能取到正確的值。 http://es6.ruanyifeng.com/?se... 一、作用域 let //i作用域在全局,每次循環(huán)i都被重新賦值了而覆蓋了之前的值 var a = []...
摘要:因?yàn)榧^函數(shù)本身沒(méi)有所以不可以當(dāng)作構(gòu)造函數(shù),也就是說(shuō),不可以使用命令,否則會(huì)拋出一個(gè)錯(cuò)誤。箭頭函數(shù)不可以使用對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在。 es6學(xué)習(xí)筆記-箭頭函數(shù)_v1.0 箭頭函數(shù)使用方法 var f = v => v; //普通函數(shù)配合箭頭函數(shù)寫(xiě)法,這里并且是傳參的 //相當(dāng)于 var f = function(v) { return v; }; /*-----------...
摘要:普通函數(shù)里代表了調(diào)用時(shí)傳入的參數(shù),但是箭頭函數(shù)不然,箭頭函數(shù)會(huì)把當(dāng)成一個(gè)普通的變量,順著作用域鏈由內(nèi)而外地查詢。不能被箭頭函數(shù)不能與關(guān)鍵字一起使用,會(huì)報(bào)錯(cuò)。 語(yǔ)法 具有一個(gè)參數(shù)的簡(jiǎn)單函數(shù) var single = a => a single(hello, world) // hello, world 沒(méi)有參數(shù)的需要用在箭頭前加上小括號(hào) var log = () => { ...
摘要:但是有了尾調(diào)用優(yōu)化之后,遞歸函數(shù)的性能有了提升。常被用來(lái)檢查對(duì)象中是否存在某個(gè)鍵名,集合常被用來(lái)獲取已存的信息。循環(huán)解構(gòu)對(duì)象本身不支持迭代,但是我們可以自己添加一個(gè)生成器,返回一個(gè),的迭代器,然后使用循環(huán)解構(gòu)和。 一、let和const 在JavaScript中咱們以前主要用關(guān)鍵var來(lái)定義變量,ES6之后,新增了定義變量的兩個(gè)關(guān)鍵字,分別是let和const。對(duì)于變量來(lái)說(shuō),在ES5中...
摘要:之前總結(jié)了的一些常見(jiàn)綁定情況前端工程師手冊(cè)之的筆記,但是還有一些沒(méi)有說(shuō)到,今天繼續(xù)學(xué)習(xí)一下。參考資料箭頭函數(shù)你不知道的上卷 之前總結(jié)了this的一些常見(jiàn)綁定情況(【前端工程師手冊(cè)】JavaScript之this的筆記),但是還有一些沒(méi)有說(shuō)到,今天繼續(xù)學(xué)習(xí)一下。 es6箭頭函數(shù) 先說(shuō)結(jié)論:箭頭函數(shù)沒(méi)有自己的this,它是根據(jù)外層(函數(shù)或者全局,后面會(huì)說(shuō)到箭頭函數(shù)作為某個(gè)對(duì)象的方法時(shí)的情況...
閱讀 2245·2023-04-26 01:57
閱讀 3269·2023-04-25 16:30
閱讀 2338·2021-11-17 09:38
閱讀 1093·2021-10-08 10:14
閱讀 1398·2021-09-23 11:21
閱讀 3697·2019-08-29 17:28
閱讀 3469·2019-08-29 15:27
閱讀 956·2019-08-29 13:04