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)
上一篇 2022年3月13日 上午8:00
下一篇 2022年3月13日 上午8:00


相关推荐

  • pycharm导入外部包

    pycharm导入外部包没有详细安装 主要是一些思路之类的 就是一个大体安装方向

    2026年3月18日
    2
  • Open webUI本地部署后,如何修改默认端口避免冲突?

    Open webUI本地部署后,如何修改默认端口避免冲突?

    2026年3月13日
    2
  • elasticsearch数据库搭建 window版

    elasticsearch数据库搭建 window版说明:安装elasticsearch之前必须安装好jdk运行环境1.首先下载安装包:这是官网最新安装包:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-windows-x86_64.zip2.直接解压到想要安装的目录即可 3.配置文件打开config下的elasticsearch.yml…

    2022年6月7日
    64
  • mysql乐观锁实现

    mysql乐观锁实现各锁的概念 悲观锁 假定会发生并发冲突 屏蔽一切可能违反数据完整性的操作悲观锁 从字面理解就是很悲观 每次去拿数据的时候都认为别人会修改 所以在每次拿的时候对数据上锁 这样就保证了数据的准确性 比如 mysql 中的表锁 行锁 表锁 当你对一张表进行修改时 会锁死整张表 其他的请求需要在修改完成释放锁才能继续 在高并发的情景下不适用 行锁 当你对一张表的某一行数据修改时 会锁死这一行数

    2026年3月26日
    2
  • -Bash: Unzip: Command Not Found解决方法 安装unzip

    -Bash: Unzip: Command Not Found解决方法 安装unzip

    2021年10月18日
    70
  • ASP.NET MVC商城网站后台管理系统

    ASP.NET MVC商城网站后台管理系统本项目使用了大量的插件,所有的商品数据皆为动态加载,全部从数据库中读取呈现在界面上,具备商品管理、用户管理等功能,还可查看商品的相关数据汇总。本项目对应的网上商城在上一篇文章中。界面展示(部分)代码太多了,就不进行部分展示了。…

    2026年4月15日
    6

发表回复

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

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