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 };

JavaScript ES6 Arrow Functions(箭头函数)

 

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.扩展阅读

arrow function MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107732.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • installous下载ipa目录

    installous下载ipa目录/private/var/mobile/Documents/Installous/Downloads

    2026年2月4日
    5
  • 谷歌的技术_探究GNSS技术在

    谷歌的技术_探究GNSS技术在文章目录引言TrueTime事务读写事务快照读只读事务总结引言Spanner是一个全球分布式的数据库,从数据模型来看Spanner很像BigTable,都是类似于key对应着一行数据,但是却并不一样,Spanner中衍生出了“目录”的概念(把两张表合并存储)。这并不是重点,Spanner的重是它是第一个在全球范围内传递数据且保证外部一致的分布式事务的系统,且支持几种特定的事务,这显然是一个很困难的问题,我们会在文章中加以描述,这篇文章主要对Spanner的事务以及实现事务所使用的TrueTimeAP

    2025年6月2日
    4
  • 汉罗塔编程_c语言斐波那契数列递归算法

    汉罗塔编程_c语言斐波那契数列递归算法汉罗塔C语言算法新手入门(3分钟学会)前言我相信大家在刚接触C语言时对汉罗塔递归算法有些头痛,现在依旧头痛的小朋友不要担心,你只要学完这篇文章,我相信你对汉罗塔算法十分感兴趣的。一看就会,不信试试?具备知识在看这篇文章之前,首先你得学会C语言函数知识点,仅此而已。1.直接上代码#include<stdio.h>intmain(){voidmove(intn,c…

    2022年10月12日
    4
  • C语言fread函数_C语言fread

    C语言fread函数_C语言freadc语言中fread函数C语言中的fread()函数(fread()functioninC)Prototype:原型:size_tfread(void*buffer,size_tlength,size_tcount,FILE*filename);Parameters:参数:void*buffer,size_tlength,si…

    2025年11月4日
    9
  • Excel VBA宏编程入门(五)——用户交互[通俗易懂]

    Excel VBA宏编程入门(五)——用户交互[通俗易懂]目录任务介绍选择文件夹选择文件保存路径交互选择一列交互选择一行任务介绍VBA编程中,为了程序的灵活性,有时候需要用到用户交互操作,例如让用户选择一个文件夹,用户选择一个单元格等等。本文将介绍一些常用的用户交互操作的实现选择文件夹St=Application.FileDialog(msoFileDialogFolderPicker).Show’如果选择了文件夹就返回-1,不选择文件夹就返回0IfSt<>0ThenfileDir=Application.File

    2022年6月2日
    37
  • leetcode题目分类_最长前缀匹配例题

    leetcode题目分类_最长前缀匹配例题原题链接编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,”flow”,”flight”]输出:”fl”示例 2:输入:strs = [“dog”,”racecar”,”car”]输出:””解释:输入不存在公共前缀。 提示:0 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成题解分

    2022年8月8日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号