成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Javascript箭頭函數(shù)和lambda

paraller / 903人閱讀

摘要:總結(jié)從上面的過程可以看出來,有兩個(gè)主要的關(guān)鍵過程箭頭函數(shù)是一個(gè)匿名函數(shù),簡(jiǎn)化書寫箭頭函數(shù)作為變量傳遞給函數(shù)的回調(diào)所以箭頭函數(shù)在很大程度上,簡(jiǎn)化了函數(shù)式的操作。其實(shí)表達(dá)式,在中就是匿名函數(shù)。

() => {} 基本特點(diǎn)

es6中的箭頭函數(shù),在實(shí)際開發(fā)中確實(shí)比較方便,通常來說會(huì)有幾個(gè)特點(diǎn):

箭頭函數(shù)中的this會(huì)綁定在外部作用域

沒有arguments

如果想返回一個(gè)對(duì)象記得加()包裹

call和apply不能傳入this

(() => {a: 1})() //返回值為undefiend,想返回對(duì)象,使用下面的方式
(() => ({a: 1})()
箭頭函數(shù)和lambda表達(dá)

lambda在計(jì)算機(jī)科學(xué)中表示匿名函數(shù),本質(zhì)上是用來簡(jiǎn)化操作的。簡(jiǎn)單來說,是一種表示方法,代表了一定的輸入和輸出。

step1:

實(shí)現(xiàn)一個(gè)平方運(yùn)算表達(dá)(x * x):
數(shù)學(xué)表達(dá)式(λ代表一個(gè)表達(dá)式的輸入):

λx.x * x

用JavaScript實(shí)現(xiàn):

(function (x) {
  return x * x;
})()
step2:

在平方的基礎(chǔ)上再加2(x * x + 2):
數(shù)學(xué)表達(dá)式:

(λx.x * x)(λx.x + 2)

用Javascript實(shí)現(xiàn):

(function(x) {
  return x + x
})((function () {
  return x * x
})())

其實(shí)就是利用了匿名函數(shù)然后,再繼續(xù)嵌套。
但是有了箭頭函數(shù),就可以更加簡(jiǎn)便地實(shí)現(xiàn)上面的操作:

(x => x + 2)((x => x * x)())
step3:

更加優(yōu)雅地實(shí)現(xiàn),其實(shí)向上面這種方式,不是特別優(yōu)雅,可讀性不好,需要一種能夠更加優(yōu)雅地方式:

上面的行為抽象出來就是:前一個(gè)的輸出作為后一個(gè)函數(shù)的輸入,應(yīng)該怎么實(shí)現(xiàn)呢?Javascript中提供了reduce這一個(gè)方法。
const action = [
  x => x * x,
  x => x + 2
];

let res = action.reduce((res, cur) => cur(res), 2);
step4:

總結(jié):從上面的過程可以看出來,有兩個(gè)主要的關(guān)鍵過程:

1、箭頭函數(shù)是一個(gè)匿名函數(shù),簡(jiǎn)化書寫

2、箭頭函數(shù)作為變量傳遞給reduce函數(shù)的回調(diào)

所以箭頭函數(shù)在很大程度上,簡(jiǎn)化了函數(shù)式的操作。其實(shí)lambda表達(dá)式,在Javascript中就是匿名函數(shù)。

箭頭函數(shù)使用總結(jié):

箭頭函數(shù)適合純函數(shù)的操作,比如map、filter、reduce等操作

箭頭函數(shù)內(nèi)部,一般不要使用this,因?yàn)閠his是和外部作用域綁定的,容易產(chǎn)生問題

問題1:
function A() {
  this.foo = 1
}

A.prototype.bar = () => console.log(this.foo)

let a = new A()
a.bar()  //undefined

因?yàn)閷?duì)象a,并沒有構(gòu)成一個(gè)作用域。

如果想讓this指向A,可以這樣寫:

function A() {
  this.foo = 1;
  this.bar = () => {
    console.log("value", this.foo);
  }
}
let a = new A();
a.bar(); //1

因?yàn)閎ar的聲明在函數(shù)A的作用域內(nèi)部。

問題2:
const A = {
  foo: 1,
  bar: () => {
    console.log("value", this.foo);
  }
}
let a = Object.create(A);
a.bar(); //undefined

如果想輸出正常的值,應(yīng)該使用function定義:

const A = {
  foo: 1,
  bar: function (){
    console.log("value", this.foo);
  }
}
let a = Object.create(A);
a.bar(); // value 1
參考文檔:

lambda和箭頭函數(shù)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106651.html

相關(guān)文章

  • 漫談javascript函數(shù)式編程

    摘要:高階函數(shù)不是的所特有的,其他編程語言也有。高階函數(shù)面向切面編程面向切面編程這種思想在開發(fā)中比較常見,主要就是將一些與核心業(yè)務(wù)無關(guān)的功能抽離出來,比如異常處理,日志統(tǒng)計(jì)等。 javascript的函數(shù)式語言特性 我們知道JavaScript使一門面向?qū)ο蟮木幊陶Z言,但這門語言同時(shí)擁有很多函數(shù)式語言的特性。 JavaScript的設(shè)計(jì)者在設(shè)計(jì)最初就參考了LISP方言之一的Scheme,引入...

    liaorio 評(píng)論0 收藏0
  • 常見的JavaScript“陷阱”

    摘要:隨著標(biāo)準(zhǔn)的普及,已經(jīng)擁有許多新的語法糖,這讓我們編寫可讀的,高質(zhì)量的代碼變得更加方便,但即使這樣仍然會(huì)遇到一些潛在的陷阱。例如集合的最終長(zhǎng)度是,由于兩次添加的數(shù)組不是同一個(gè)。最終會(huì)得到大小為的集合,因?yàn)樽址遣豢勺儭? showImg(https://segmentfault.com/img/remote/1460000019006033); 隨著ES6標(biāo)準(zhǔn)的普及,JavaScript...

    greatwhole 評(píng)論0 收藏0
  • ES6函數(shù)Lambda演算

    摘要:高階函數(shù)函數(shù)式編程中,接受函數(shù)作為參數(shù),或者返回一個(gè)函數(shù)作為結(jié)果的函數(shù)通常就被稱為高階函數(shù)。均屬于高階函數(shù),高階函數(shù)并不神秘,我們?nèi)粘>幊桃矔?huì)用到。參考演算函數(shù)式編程指南入門康托爾哥德爾圖靈永恒的金色對(duì)角線原文函數(shù)與演算 緣起 造了一個(gè)輪子,根據(jù)GitHub項(xiàng)目地址,生成項(xiàng)目目錄樹,直觀的展現(xiàn)項(xiàng)目結(jié)構(gòu),以便于介紹項(xiàng)目。歡迎Star。 repository-tree 技術(shù)棧: ES6 ...

    fasss 評(píng)論0 收藏0
  • 每個(gè) JavaScript 工程師都應(yīng)當(dāng)知道的 10 個(gè)面試題

    摘要:所支持的面向?qū)ο缶幊贪ㄔ屠^承。發(fā)明于年的就是首批支持函數(shù)式編程的語言之一,而演算則可以說是孕育了這門語言。即使在今天,這個(gè)家族的編程語言應(yīng)用范圍依然很廣。 1. 能說出來兩種對(duì)于 JavaScript 工程師很重要的編程范式么? JavaScript 是一門多范式(multi-paradigm)的編程語言,它既支持命令式(imperative)/面向過程(procedural)編程...

    jone5679 評(píng)論0 收藏0
  • 每個(gè) JavaScript 工程師都應(yīng)當(dāng)知道的 10 個(gè)面試題

    摘要:所支持的面向?qū)ο缶幊贪ㄔ屠^承。發(fā)明于年的就是首批支持函數(shù)式編程的語言之一,而演算則可以說是孕育了這門語言。即使在今天,這個(gè)家族的編程語言應(yīng)用范圍依然很廣。 1. 能說出來兩種對(duì)于 JavaScript 工程師很重要的編程范式么? JavaScript 是一門多范式(multi-paradigm)的編程語言,它既支持命令式(imperative)/面向過程(procedural)編程...

    YorkChen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<