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