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學習筆記1(Lambda表示式)
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.方法引用簡述 方法引用是用來直接訪問類或者例項的已經存在的方法或