1. 程式人生 > >JavaScript 箭頭函式(Lambda表示式)

JavaScript 箭頭函式(Lambda表示式)

簡介

JavaScript 中,函式可以用箭頭語法(”=>”)定義,有時候也叫“lambda表示式”。這種語法主要意圖是定義輕量級的內聯回撥函式。例如:

// Arrow function:
[5, 8, 9].map(item => item + 1); // -> [6, 9, 10]

// Classic function equivalent:
[5, 8, 9].map(function(item) {
  return item + 1;
}); // -> [6, 9, 10]

當箭頭函式有一個引數時,引數兩邊的括號是可有可無的,但是還是有括號看起來看清楚。

const
foo = bar => bar + 1; const bar = (baz) => baz + 1;

箭頭函式不帶引數時,必須要用括號,比如:

const foo = () => "foo";

如果函式體不是隻一行,應該用花括號,並顯式地返回(如果需要返回值)。

const foo = bar => {
  const baz = 5;
  return bar + baz;
};
foo(1); // -> 6

arguments object

箭頭函式不會暴露 argument 物件,所以,argument 將簡單地指向當前scope內的一個變數。

arguments object 是所有函式中的一個本地變數。你可以通過 arguments 物件引用函式的入參。這個物件包含傳給這個函式的每個入參的入口,索引從0開始,例如:
arguments[0]
arguments[1]
arguments[2]

const arguments = [true];
const foo = x => console.log(arguments[0]);

foo(false); // -> true

基於此,箭頭函式也不知道它的呼叫者。
當缺少arguments object時,可能會有所限制(極少數情況),其餘的引數一般可以做為替代。

const arguments = [true];
const foo = (...arguments) => console.log(arguments[0]);

foo(false); // -> false

繫結this的值

箭頭函式是 lexically scoped,這意味著其 this 繫結到了附近scope的上下文。也就是說,不管this指向什麼,都可以用一個箭頭函式儲存。

看下面的例子, Cow 類有一個方法在1秒後輸出sound。

class Cow {
  constructor() {
    this.sound = "moo";
  }
  makeSoundLater() {
    setTimeout(() => {
       console.log(this.sound);
    }, 1000);
  }
}

var myCow = new Cow();
var yourCow = new Cow();

yourCow.sound = "moooooo";

myCow.makeSoundLater();
yourCow.makeSoundLater();

在 makeSoundLater() 方法中,this 指向當前 Cow 物件的例項。所以在這個例子中當我們呼叫 myCow.makeSoundLater(), this 指向 myCow。然後,通過使用箭頭函式,我們儲存了 this,這樣我們就可以在需要時引用 this.sound 了。將會輸出 “moo”,而不是yourCow.makeSoundLater()輸出的“moooooo”。

隱式返回值

箭頭函式可以通過省略掉小括號做到隱式返回值。

const foo = x => x + 1;
foo(1); // -> 2

Object Literal 是用花括號括起來的,分號隔開的 k-v 物件列表。

const foo = () => { bar: 1 } // foo() returns undefined
const foo = () => ({ bar: 1 }) // foo() returns {bar: 1}

顯示返回值

const foo = x => {
  return x + 1;
}

foo(1); // -> 2

語法


x => y // Implicit return


x => { return y } // Explicit return


(x, y, z) => { ... } // Multiple arguments


(() => { ... })() // Immediately-invoked function expression

相關推薦

JavaScript 箭頭函式Lambda表示式

簡介 JavaScript 中,函式可以用箭頭語法(”=>”)定義,有時候也叫“lambda表示式”。這種語法主要意圖是定義輕量級的內聯回撥函式。例如: // Arrow function: [5, 8, 9].map(item => ite

最全最強 Java 8 - 函式程式設計lambda表示式

Java 8 - 函式程式設計(lambda表示式) 我們關心的是如何寫出好程式碼,而不是符合函式程式設計風格的程式碼。 @pdai Java 8 - 函式程式設計(lambda表示式) 簡介 lambda表示式 分類 惰性求值方法 及早求值方法 stream & parallelStre

java8學習筆記1Lambda表示式

Lambda 表示式 Lambda 表示式,也可稱為閉包,它是推動 Java 8 釋出的最重要新特性。Lambda 允許把函式作為一個方法的引數(函式作為引數傳遞進方法中)。使用 Lambda 表示式可以使程式碼變的更加簡潔緊湊。 語法 lambda 表示式的語法格式如

jdk8新特性Lambda表示式結合spring 執行緒池,一行程式碼實現多執行緒

1.配置spring 執行緒池 @Configuration @EnableAsync @ConfigurationProperties(prefix="threadpool") public class ExecutePoolConfiguration { @V

System.Action的使用lambda 表示式

對於Action的使用方法使用如下: namespace ConsoleApp1 { class Program { static void Main(string[] args) { string first = "First";

ES6箭頭函式Arrow Functions

ES6可以使用“箭頭”(=>)定義函式,注意是函式,不要使用這種方式定義類(構造器)。 一、語法 1. 具有一個引數的簡單函式 1 2 var single = a => a single('hello, world'

Java™ 教程Lambda表示式

Lambda表示式 匿名類的一個問題是,如果匿名類的實現非常簡單,例如只包含一個方法的介面,那麼匿名類的語法可能看起來不實用且不清楚,在這些情況下,你通常會嘗試將方法作為引數傳遞給另一個方法,例如當有人單擊按鈕時應採取的操作,Lambda表示式使你可以執行此操作,將

ES6新特性箭頭函式Arrow Function

箭頭函式是ECMAScript 6最受關注的更新內容之一。它引入了一種用「箭頭」(=>)來定義函式的新語法,它…它碉堡了~。箭頭函式與傳統的JavaScript函式主要區別在於以下幾點:1.對 this 的關聯。函式內建 this 的值,取決於箭頭函式在哪兒定義,而非

《零基礎入門學習Python》21--函式lambda表示式內建BIF filte()和map()

前言 接下來學習怎麼建立匿名函式 知識點 lambda 表示式 Python 允許使用lambda關鍵字建立匿名函式 lambda 函式怎麼使用?  單個引數 >>> def add(x): retur

JavaScript高階程式設計讀書筆記函式表示式

定義函式的方式有兩種:一種是函式宣告,另一種就是函式表示式。 函式宣告的一個重要特徵就是函式宣告提升(function declaration hoisting),意思是在執行程式碼前會先讀取函式宣告。 這個例子不會報錯,因為程式碼在執行前會先讀取函式宣告。理解函式提升的關鍵就是區別函式宣告和函式表示式之

Kotlin學習筆記函式Lambda表示式

函式 Kotlin中,使用fun關鍵字定義一個函式,函式引數使用 Pascal 表示法定義,即 name: type。引數用逗號隔開。每個引數必須有顯式型別。 fun foo(arg1:String,arg2:Boolean,arg3:Int):Int{

java學習筆記-- java新特性 列舉 & 註解 & 介面定義加強 & Lambda表示式

列舉 (enum) 高階的多例模式 java中列舉使用enum關鍵字定義列舉 列舉就是一種多例設計模式 enmu Color{     RED,BLUE,GREEN;     } enum Color{

JavaScript函式定義與解析、匿名函式函式傳參、return關鍵字和陣列操作資料的方法、多維陣列、陣列去重

函式 函式就是重複執行的程式碼片。 1、函式定義與執行 <script type="text/javascript"> // 函式定義 function aa(){ alert('hello!'); } // 函式執行

python--匿名函式lambda

匿名函式:為了解決功能簡單的函式而設計的一句話函式 def square(n): return n*n #等價於 square = lambda n: n*n print(square(5)) 格式說明 函式名 = lambda 引數 : 返回值 ''' 引數可以有多個,用

Python 拓展之特殊函式lambda 函式,map 函式,filter 函式,reduce 函式

寫在之前 今天給大家介紹幾個比較特殊的函式,他們具有函數語言程式設計的特點,有人將它們視為 Python 可進行 “函數語言程式設計” 的見證,至於什麼是函數語言程式設計,不是本篇文章的重點,感興趣的可以去了解一下。老讀者可能都知道,我非常推崇 Python 的簡潔優雅,而今天的這幾個函式,有了它們,最大的

JavaScript之 ------ 函式一般函式、動態函式、匿名函式

函式 一、一般函式 1、格式: function  函式名(形式引數...) { 執行語句; return 返回值; } 函式是多條執行語句的封裝體,只有被呼叫才會被執行。 注意:呼叫有引數的函式,但沒有給其傳值,函式一樣可以執行,或者呼叫沒有引數的函式,給其傳值,該函

python幾個重要的函式lambda,filter,reduce,map,zip

一、匿名函式lambda lambda argument1,argument2,...argumentN :expression using arguments   1、lambda是一個表示式,而不是一個語句。 因為這一點,lamb

JavaScript 6連載】二、函式工廠模式

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>02-工廠模式</title><script> /*// 函式在執行的時候,執行環境的作用域

Python匿名函式lambda函式

匿名函式lambda Python使用lambda關鍵字創造匿名函式。所謂匿名,意即不再使用def語句這樣標準的形式定義一個函式。這種語句的目的是由於效能的原因,在呼叫時繞過函式的棧分配。其語法是: lambda [arg1[, arg2, ... ar

Java 8 新特性:Lambda 表示式之方法引用Lambda 表示式補充版

方法引用 文 | 莫若吻      (注:此文乃個人查詢資料然後學習總結的,若有不對的地方,請大家指出,非常感謝!) 1.方法引用簡述 方法引用是用來直接訪問類或者例項的已經存在的方法或