1. 程式人生 > >JavaScript ES6 Arrow Functions(箭頭函式)

JavaScript ES6 Arrow Functions(箭頭函式)

1. 介紹

第一眼看到ES6新增加的 arrow function 時,感覺非常像 lambda 表示式。

那麼arrow function是幹什麼的呢?可以看作為匿名函式的簡寫方式。

var addition = function(a, b) { return a + b };
// 等同
var addition = (a, b) => { return a + b };

2. 語法

arrow functions(箭頭函式)主要有以下4種語法:

// 1)基本
(param1, param2, paramN) => { expression }
(param1, param2, paramN) => { return expression }

// 2)只有一個引數時,括號是可選的
(singleParam) => { expression }
singleParam => { expression }

// 3)不帶引數時,在引數區域帶有括號
() => { expression }

// 4)函式主體若不帶{}大括號,表示直接返回函式主體
(param1, param2, paramN) => { return expression }
(param1, param2, paramN) => expression // 等同於上面

3. 特性

3.1 沒有自身this

arrow function沒有自身的this,即在arrow function內部使用this時,此this指向建立此函式時的外部this。

場景:在Web開發時都會用到ajax的回撥,回撥函式內的this常常用外部建立的self、that、_this等變數暫存,而當回撥函式採用arrow function方式時就可以直接使用外部的this。

示例

var ajax = function(url, successCallback) {
    // TODO ajax
    successCallback && successCallback();
};

var productBLL = {
    productName: '瓜子',
    query: function() {
        // arrow function
        ajax('query', () => {
            console.log(this); // => productBLL
            console.log(this.productName); // => 瓜子(productBLL.productName)
        });
    }
};

productBLL.query();

3.2  call()、apply() 呼叫無法改變this

就像上面講的arrow function沒有自身的this,當用call()或apply() 呼叫箭頭函式時無法改變函式主體內的this。

示例

// 普通函式
var sayHello = function(userName) {
    console.log('hi ' + userName);
    console.log(this);
};
sayHello.call({ x: 1 }, 'polk'); // => this == { x: 1 }

// 箭頭函式
var sayHello2 = (userName) => {
    console.log('hi ' + userName);
    console.log(this);
};
sayHello2.call({ y: 2 }, 'polk'); // => this == window

3.3 沒有arguments

使用arrow function建立的函式,自身是沒有arguments成員。

var sayHello = (userName) => {
    console.log('hi ' + userName);
    console.log(arguments); // => Uncaught ReferenceError: arguments is not defined
};

3.4 arrow function作為某個物件的方法成員時,this指向非此物件

當某個物件的方法為arrow function時,那麼此方法內的this指向並非是此物件。

示例:

var productBLL = {
    productName: '瓜子',
    sayName: function() {
        console.log(this.productName);
    },
    sayName2: () => {
        console.log(this.productName);
    }
};

productBLL.sayName(); // => 瓜子
productBLL.sayName2(); // => undefined, this == window

4.擴充套件閱讀

相關推薦

JavaScript ES6 Arrow Functions箭頭函式

1. 介紹 第一眼看到ES6新增加的 arrow function 時,感覺非常像 lambda 表示式。 那麼arrow function是幹什麼的呢?可以看作為匿名函式的簡寫方式。 如: var addition = function(a, b) { return a + b }; //

ES6新特性-函式的簡寫箭頭函式

作者:just4you 來源:CSDN 原文:https://blog.csdn.net/just4you/article/details/79258799 (感謝分享) 通常函式的定義方法 var fn = function(...){ ...... } //例如:

JavaScript函式的Lambda簡略寫法箭頭函式

JS的箭頭函式是函式表示式的簡略寫法,格式如下: (引數1,引數2,......,引數n) =>{ 具體函式邏輯 } 該表示式相當於定義瞭如下函式: function(引數1,引數2,......,引數n) { 具體函式邏輯 } 當我們需要使用這個函

前端測試框架Jest系列教程 -- Global Functions全域性函式

寫在前面:   Jest中定義了很多全域性性的Function供我們使用,我們不必再去引用別的包來去實現類似的功能,下面將列舉Jest中實現的全域性函式。 Jest Global Functions afterAll(fn, timeout) 從字面意思就可以理解到它是在所有測試執行完之後才會執行的,

this 指向詳細解析箭頭函式

箭頭函式有幾個使用注意點。(1)函式體內的this物件,就是定義時所在的物件,而不是使用時所在的物件。(2)不可以當作建構函式,也就是說,不可以使用new命令,否則會丟擲一個錯誤。(3)不可以使用arguments物件,該物件在函式體內不存在。如果要用,可以用Rest引數代替。(4)不可以使用yield命令,

ES6 常用功能總結箭頭函式、let/const、解構賦值、模板字串、Promise物件等

let關鍵字 作用:與var類似,用於宣告一個變數 與var不同:let所宣告的變數,在塊級作用域內有效,也就是隻在它所在的程式碼塊有效 { let a = 100; var b = 10; } console.log(a); //undefined

React native 之ES6語法promise,箭頭函式

這裡總結幾個ES6與ES5區別中常用的幾塊。 一、箭頭函式 ES6中提供了使用(=>)符號來定義函式。 箭頭函式是用箭頭符號在需要回調函式的地方之間定義不需要名稱,程式碼簡潔。 將需要的引數放在=>前的()中即可,=>後就是函式體,

JavaScript ES6功能概述ECMAScript 6和ES2015 +

JavaScript在過去幾年中發生了很大的變化。這些是您今天可以開始使用的12項新功能! 該語言的新增內容稱為ECMAScript 6.它也稱為ES6或ES2015 +。 自1995年JavaScript構思以來,它一直在緩慢發展。每隔幾年就會發生新增事件。

javascript中自執行自呼叫函式的兩種寫法

自執行函式定義: 自執行函式或是自呼叫函式 宣告完了,馬上進行呼叫,只能使用一次,,有兩種寫法,舉個栗子如下: 寫法一: 格式:(函式)(實參) <script&g

JavaScript之事件處理監聽函式

JavaScript之事件處理(監聽)函式事件是使用者和瀏覽器自身進行的特定行為。這些事件都有自己的名字,如click,,load,mouseover。用於響應某個事件而呼叫的函式稱為事件處理函式,或者DOM稱之為事件監聽函式。事件處理函式有兩種分配方式:在JavaScri

記一個在js中使用setTimeout方法踩的坑箭頭函式與function定義的區別

今天寫程式碼時遇到了一個問題,程式碼如下 this.timer = setTimeout(function() { const result = [] for (let i in this.cities) { this.cities[

JavaScript之閉包重新認識

log 變量 for 局部變量 ava logs 所在 數組函數 使用 最近又重新學習了閉包,發現之前沒有深刻理解作用域鏈,學習作用域鏈後對閉包才可以做到真正的理解。 閉包是指有權另一個函數作用域中變量的函數。要理解閉包首先理解作用域鏈。

JavaScript面向對象收集整理

span 但是 cti 運算 www n) 兩個 eat 擁有 (1)封裝   首先理解構造函數:所謂"構造函數",其實就是一個普通函數,但是內部使用了this變量。對構造函數使用new運算符,就能生成實例,並且this變量會綁定在實例對象上。   function Ca

javaScript顯示和隱藏display屬性

javascript<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>display</t

JavaScript--對象繼承組合繼承

color utf-8 doc ctype meta cti cnblogs log 組合 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta cha

JavaScript之使用AJAX適合初學者

window pear including orf static pla into rst sse ??網上關於AJAX的教程和教程層出不窮,實現生活中關於AJAX的書籍也是琳瑯滿目,然而太多的選擇容易令人眼花繚亂,不好取舍。事實是,一般的教程或書籍都不會講Web服務器的搭

類和物件的初步認識建構函式

類和物件的初步認識(建構函式) Java是一門面向物件的程式語言(OOP) , 面向物件程式三大的特點:封裝,繼承,多型 1.類: class Person { private int age; public int getAge() {

hdu 5724 Chess SG函式

題目連結:hdu 5724 題意:有一個n行20列的棋盤,棋盤上分佈著一些棋子,A、B兩人輪流下棋,A先手,每次操作可以將某個棋子放到自己右邊的第一個空位(也就是說右邊如果已經有子,可以跳過它,沒有就右移一步),但最多20列,絕對不能超過棋盤,無棋可走的輸。 題解:進行狀態壓縮,bit來

es6中的(=>)箭頭函式

x => x * x 上面的箭頭函式相當於: function (x) { return x * x; } 箭頭函式相當於匿名函式,並且簡化了函式定義。 箭頭函式有兩種格式,一種像上面的,只包含一個表示式,連{ ... }和return都省略掉了。 還有一種可以包含多條語句,這時候就不能省

ES6字串擴充套件模板字串

es5中的多行字串和變數拼接: let num = 10, price = 100; let str = "我們現在有"+num+"個人\ 來買蘋果,一斤蘋果10元錢,\ 他們每人買一斤,那麼總價是"+price+"元。" //let