摘要:因?yàn)榧^函數(shù)沒有構(gòu)造方法。因?yàn)椴荒芤粋€(gè)箭頭函數(shù),所以也沒必要有了。的值在這個(gè)箭頭函數(shù)的整個(gè)生命周期里面都不變。你必須通過命名參數(shù)和剩余參數(shù)去獲取箭頭函數(shù)的參數(shù)。非箭頭函數(shù)在非嚴(yán)格模式下面可以有重名參數(shù)。
例行聲明:接下來的文字內(nèi)容全部來自 Understanding ECMAScript 6,作者是Nicholas C.Zakas,也就是大名鼎鼎的Professional JavaScript for Web Developers(《JavaScript高級(jí)程序設(shè)計(jì)》)的作者。我很喜歡他的寫作風(fēng)格,所以在看了Understanding ECMAScript 6后試著自己寫篇博客梳理一下,相當(dāng)于簡單地翻譯和鞏固一下吧。在此特別感謝Nicholas的原創(chuàng),我只是一個(gè)小矮人,站在巨人的肩膀上,所以看到了原本看不到的風(fēng)景。
原文鏈接:https://leanpub.com/understan...
1: 什么是箭頭函數(shù)?
箭頭函數(shù),顧名思義就是用箭頭(=>來定義的函數(shù),不會(huì)用到關(guān)鍵字‘function’),例如:
let sum = (a, b)=> {return a + b;}
效果等同于:
var sum = function(a, b){return a + b;}
但是,事實(shí)上上面兩個(gè)function存在很多不同,會(huì)在之后的第三點(diǎn)講解。
2: 箭頭函數(shù)的多種定義方式
箭頭函數(shù)的定義形式有很多種(這也是我不喜歡的一點(diǎn),呵呵),具體的有:
1: 什么情況下都可以型
let sum = (a, b)=>{return a + b;} 這種是最常用,最通用的形式。
2: 只有一個(gè)參數(shù)型
let self = num1 => {return num1;} 可以看到相對(duì)第一種定義的區(qū)別是:沒有用()包圍參數(shù). 這種形式只可以在這種情況下用。
3: 沒有參數(shù)型
let functionA = ()=> {return "hehe";} 當(dāng)沒有參數(shù)時(shí),必須要有"()"。
4: 兩個(gè)參數(shù)及其以上型
let sum = (a, b) => {return a + b;} 當(dāng)有兩個(gè)及其以上的參數(shù)時(shí),也必須要用‘()’把參數(shù)括起來。
5:沒有return&&沒有{}
let sum = (a, b) => a + b; 你可以同時(shí)不給return關(guān)鍵字和{},效果`等同`于上面的第4種情況
6: 沒有return && 有{}
let sum = (a, b)=> {a + b;} 這種情況不等于第5種,這種情況下`"a+b"`并不會(huì)作為這個(gè)函數(shù)的返回值,如果你調(diào)用這個(gè)函數(shù),得到的結(jié)果`‘undefined’`
7: 有return && 沒有{}
let sum = (a, b)=> return a + b; 不要作死,這種寫法直接給你一個(gè)syntaxError.
注明,以上的第5,6,7點(diǎn)針對(duì)的是函數(shù)方法體的部分,不論函數(shù)參數(shù)是幾個(gè),結(jié)果沒有區(qū)別;同樣的,第2,3,4點(diǎn)針對(duì)的是函數(shù)的參數(shù)部分,不論函數(shù)的方法體怎么寫,對(duì)結(jié)果沒有影響。
3: 箭頭函數(shù)和一般的非箭頭函數(shù)的區(qū)別:
1: 沒有this, super, arguments和new.target綁定。一個(gè)箭頭函數(shù)里面的這幾個(gè)指由包含它的最近的非箭頭函數(shù)決定 2: 不能使用new來調(diào)用。因?yàn)榧^函數(shù)沒有構(gòu)造方法。 3: 沒有[prototype]屬性。因?yàn)椴荒躰ew一個(gè)箭頭函數(shù),所以prototype也沒必要有了。 4: 不能改變this的值。this的值在這個(gè)箭頭函數(shù)的整個(gè)生命周期里面都不變。 5: 沒有arguments。你必須通過命名參數(shù)和剩余參數(shù)去獲取箭頭函數(shù)的參數(shù)。 6: 不能有重名參數(shù)。非箭頭函數(shù)在非嚴(yán)格模式下面可以有重名參數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/81595.html
摘要:注意箭頭函數(shù)有幾個(gè)使用注意點(diǎn)不可以使用對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在。不可以當(dāng)作構(gòu)造函數(shù),也就是說,不可以使用命令,否則會(huì)拋出一個(gè)錯(cuò)誤。不可以使用命令,因此箭頭函數(shù)不能用作函數(shù)。 前言 在JavaScript的世界中函數(shù)被譽(yù)為一等公民,每當(dāng)我們需要在JS定義一個(gè)新的函數(shù),我們都會(huì)毫不猶豫的function() {},也許我們可以開始換一種方式來定義一個(gè)函數(shù),也就是本文的主角箭頭函數(shù),一個(gè)...
摘要:簡單的說就是,新語法編譯器舊語法。說明所以,對(duì)于新特性,我們可以通過使用,也可以通過語法轉(zhuǎn)化來達(dá)到兼容。 0x001 polyfill 我們都知道,js總是一直存在著兼容性問題,雖然其他語言也存在著兼容性問題,比如c++、java,但那種兼容性是新特性在舊版本上的不兼容,js則存在著各種奇形怪哉的不兼容。這其中有著非常復(fù)雜的歷史和時(shí)代的原因,并不加以累述。而解決兼容性問題的方法在以前只...
摘要:而改變了這種狀態(tài),雖然定義的類用運(yùn)算符得到的仍然是,但它不能像普通函數(shù)一樣直接調(diào)用同時(shí),中定義的方法函數(shù),也不能當(dāng)作構(gòu)造函數(shù)用來調(diào)用。而在中,用調(diào)用一個(gè)構(gòu)造函數(shù),會(huì)創(chuàng)建一個(gè)新對(duì)象,而其中的就指向這個(gè)新對(duì)象。 JavaScript 中的 this 指向問題有很多博客在解釋,仍然有很多人問。上周我們的開發(fā)團(tuán)隊(duì)連續(xù)兩個(gè)人遇到相關(guān)問題,所以我不得不將關(guān)于前端構(gòu)建技術(shù)的交流會(huì)延長了半個(gè)時(shí)候討論 ...
摘要:特性介紹箭頭函數(shù)是新增的特性之一,它為這門語言提供了一種全新的書寫函數(shù)的語法。用生成的函數(shù)會(huì)定義一個(gè)自己的,而箭頭函數(shù)沒有自己的,而是會(huì)和上一層的作用域共享。 本文同步自我得博客:http://www.joeray61.com JS中的箭頭 箭頭在JS里并不算是個(gè)新鮮的玩意兒,一直以來,JS都支持-->這樣的箭頭。 很早的時(shí)候有些瀏覽器還不支持JS,當(dāng)時(shí)的人們?yōu)榱思嫒葸@些瀏覽器,需要這...
摘要:這就是所謂的箭頭函數(shù)不綁定,而在我看來,回調(diào)函數(shù)就是箭頭函數(shù)最好的歸宿。 0x000 概述 箭頭函數(shù)有兩個(gè)作用: 更簡短的寫法 不綁定this 0x001 語法一表覽 ()=>{} ()=>{console.log(arrow);return null} ()=>hello (num1, num2)=>num1+num2 num=>++num ()=>({name:arrow})...
閱讀 2553·2021-11-22 15:35
閱讀 3826·2021-11-04 16:14
閱讀 2771·2021-10-20 13:47
閱讀 2586·2021-10-13 09:49
閱讀 2136·2019-08-30 14:09
閱讀 2498·2019-08-26 13:49
閱讀 948·2019-08-26 10:45
閱讀 2839·2019-08-23 17:54