摘要:總結從上面的過程可以看出來,有兩個主要的關鍵過程箭頭函數是一個匿名函數,簡化書寫箭頭函數作為變量傳遞給函數的回調所以箭頭函數在很大程度上,簡化了函數式的操作。其實表達式,在中就是匿名函數。
() => {} 基本特點
es6中的箭頭函數,在實際開發中確實比較方便,通常來說會有幾個特點:
箭頭函數中的this會綁定在外部作用域
沒有arguments
如果想返回一個對象記得加()包裹
call和apply不能傳入this
(() => {a: 1})() //返回值為undefiend,想返回對象,使用下面的方式 (() => ({a: 1})()箭頭函數和lambda表達
lambda在計算機科學中表示匿名函數,本質上是用來簡化操作的。簡單來說,是一種表示方法,代表了一定的輸入和輸出。
step1:實現一個平方運算表達(x * x):
數學表達式(λ代表一個表達式的輸入):
λx.x * x
用JavaScript實現:
(function (x) { return x * x; })()step2:
在平方的基礎上再加2(x * x + 2):
數學表達式:
(λx.x * x)(λx.x + 2)
用Javascript實現:
(function(x) { return x + x })((function () { return x * x })())
其實就是利用了匿名函數然后,再繼續嵌套。
但是有了箭頭函數,就可以更加簡便地實現上面的操作:
(x => x + 2)((x => x * x)())step3:
更加優雅地實現,其實向上面這種方式,不是特別優雅,可讀性不好,需要一種能夠更加優雅地方式:
上面的行為抽象出來就是:前一個的輸出作為后一個函數的輸入,應該怎么實現呢?Javascript中提供了reduce這一個方法。
const action = [ x => x * x, x => x + 2 ]; let res = action.reduce((res, cur) => cur(res), 2);step4:
總結:從上面的過程可以看出來,有兩個主要的關鍵過程:
1、箭頭函數是一個匿名函數,簡化書寫
2、箭頭函數作為變量傳遞給reduce函數的回調
所以箭頭函數在很大程度上,簡化了函數式的操作。其實lambda表達式,在Javascript中就是匿名函數。
箭頭函數使用總結:箭頭函數適合純函數的操作,比如map、filter、reduce等操作
箭頭函數內部,一般不要使用this,因為this是和外部作用域綁定的,容易產生問題
問題1:function A() { this.foo = 1 } A.prototype.bar = () => console.log(this.foo) let a = new A() a.bar() //undefined
因為對象a,并沒有構成一個作用域。
如果想讓this指向A,可以這樣寫:
function A() { this.foo = 1; this.bar = () => { console.log("value", this.foo); } } let a = new A(); a.bar(); //1
因為bar的聲明在函數A的作用域內部。
問題2:const A = { foo: 1, bar: () => { console.log("value", this.foo); } } let a = Object.create(A); a.bar(); //undefined
如果想輸出正常的值,應該使用function定義:
const A = { foo: 1, bar: function (){ console.log("value", this.foo); } } let a = Object.create(A); a.bar(); // value 1參考文檔:
lambda和箭頭函數
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106651.html
摘要:高階函數不是的所特有的,其他編程語言也有。高階函數面向切面編程面向切面編程這種思想在開發中比較常見,主要就是將一些與核心業務無關的功能抽離出來,比如異常處理,日志統計等。 javascript的函數式語言特性 我們知道JavaScript使一門面向對象的編程語言,但這門語言同時擁有很多函數式語言的特性。 JavaScript的設計者在設計最初就參考了LISP方言之一的Scheme,引入...
摘要:隨著標準的普及,已經擁有許多新的語法糖,這讓我們編寫可讀的,高質量的代碼變得更加方便,但即使這樣仍然會遇到一些潛在的陷阱。例如集合的最終長度是,由于兩次添加的數組不是同一個。最終會得到大小為的集合,因為字符串是不可變。 showImg(https://segmentfault.com/img/remote/1460000019006033); 隨著ES6標準的普及,JavaScript...
摘要:高階函數函數式編程中,接受函數作為參數,或者返回一個函數作為結果的函數通常就被稱為高階函數。均屬于高階函數,高階函數并不神秘,我們日常編程也會用到。參考演算函數式編程指南入門康托爾哥德爾圖靈永恒的金色對角線原文函數與演算 緣起 造了一個輪子,根據GitHub項目地址,生成項目目錄樹,直觀的展現項目結構,以便于介紹項目。歡迎Star。 repository-tree 技術棧: ES6 ...
摘要:所支持的面向對象編程包括原型繼承。發明于年的就是首批支持函數式編程的語言之一,而演算則可以說是孕育了這門語言。即使在今天,這個家族的編程語言應用范圍依然很廣。 1. 能說出來兩種對于 JavaScript 工程師很重要的編程范式么? JavaScript 是一門多范式(multi-paradigm)的編程語言,它既支持命令式(imperative)/面向過程(procedural)編程...
摘要:所支持的面向對象編程包括原型繼承。發明于年的就是首批支持函數式編程的語言之一,而演算則可以說是孕育了這門語言。即使在今天,這個家族的編程語言應用范圍依然很廣。 1. 能說出來兩種對于 JavaScript 工程師很重要的編程范式么? JavaScript 是一門多范式(multi-paradigm)的編程語言,它既支持命令式(imperative)/面向過程(procedural)編程...
閱讀 3300·2021-11-23 09:51
閱讀 2911·2021-10-28 09:33
閱讀 875·2021-10-08 10:04
閱讀 3682·2021-09-22 15:13
閱讀 1015·2019-08-30 15:55
閱讀 2906·2019-08-30 15:44
閱讀 564·2019-08-30 13:04
閱讀 2938·2019-08-30 12:56