排名前10的ES6特性之箭头函数 【Arrow Functions】

本文详细介绍了ES6中箭头函数的语法特点及其与传统函数的区别,通过具体示例对比了箭头函数如何简化代码并减少冗余,同时探讨了箭头函数在this指向上的行为差异。

Ranking(1) 箭头函数 Arrow Functions

 

【1】 文章的开头先来熟悉几个箭头表示方式。

<!--    表示:单行注释 比如<!-- -->
-->     表示:‘趋向于’操作符 while (n --> 0) n趋向0
<=      表示:小于等于 
=>      这又是什么呢?

 

【2】Arrow function 语法规则

() => { ... } // no parameter
x => { ... } // one parameter
(x, y) => { ... } // 多个参数
指定一个函数体
x => { return x * x } // block
x => x * x // 等同上一行

 

【3】 再来看2个例子用以区分传统方法与ES6 。

eg 1:
1) 传统方法。

var arr =[1,2,3]
var squares = arr.map(function(x){return x*x});

2) arrow functions 应该如何表示呢?

let arr = [1, 2, 3];
let squares = arr.map(x => x * x);

//输出的功能与传统方式一样。

结论一:ES6 的方法比传统的方法的优势之一,减少冗余或是累赘。表述更加清晰。

eg 2:

1) 传统方法。

function Prefixer(prefix) {
    this.prefix = prefix;
}
Prefixer.prototype.prefixArray = function (arr) { // (A)
    //'use strict';
    return arr.map(function (x) { // (B)
    // Doesn’t work:
        return this.prefix + x; // (C)
    });
};
// output :["undefinedJoe", "undefinedAlex"]

//严格模式下,this.prefix 是undefined

传统方式的解决方案是:

Solution 1: that = this
function Prefixer(prefix) {
        this.prefix = prefix;
    }
    Prefixer.prototype.prefixArray = function (arr) {
        var that = this; // (A)
        return arr.map(function (x) {
            return that.prefix + x;
        });
    };
    > var pre = new Prefixer('Hi ');
    > pre.prefixArray(['Joe', 'Alex']);
    //out put:[ 'Hi Joe', 'Hi Alex' ]
Solution 2: 为this指定值
 function Prefixer(prefix) {
        this.prefix = prefix;
    }
    Prefixer.prototype.prefixArray = function (arr) {
        return arr.map(function (x) {
            return this.prefix + x;
        }, this); // (A)
    };
Solution 3: bind(this)
function Prefixer(prefix) {
        this.prefix = prefix;
    }
    Prefixer.prototype.prefixArray = function (arr) {
        return arr.map(function (x) {
            return this.prefix + x;
        }.bind(this)); // (A)
    };

 

2) arrow functions 有着更加简洁的方式

 function Prefixer(prefix) {
        this.prefix = prefix;
    }
    Prefixer.prototype.prefixArray = function (arr) {
        return arr.map((x) => {
            return this.prefix + x;
        });
    };

另一种表现形式:

如果采用ES6的构造函数以及利用类的方式,将更加方便简洁

class Prefixer {
        constructor(prefix) {
            this.prefix = prefix;
        }
        prefixArray(arr) {
            return arr.map(x => this.prefix + x); // (A)
        }
    }

//表现功能与传统方式一样。

在方法和箭头函数之间,我再也不会错写function了,这真是一个绝妙的设计思想!

箭头函数与非箭头函数间还有一个细微的区别,箭头函数不会获取它们自己的arguments对象。
诚然,在ES6中,你可能更多地会使用不定参数和默认参数值这些新特性

除了这样,箭头函数和正常函数之间没有明显的差异。例如,类和实例产生相同的结果:

> typeof (() => {})
'function'
> () => {} instanceof Function
true

> typeof function () {}
'function'
> function () {} instanceof Function
true

下一节 讨论 ES6 的 Modules.

 

转载于:https://www.cnblogs.com/alplcx/p/5103459.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值