zoukankan      html  css  js  c++  java
  • ES6学习(2)——arrows箭头函数

    Arrows => 箭头函数

    箭头函数,若有了解过coffeeScript的同学,或许对此印象深刻,因为它可以让语法省略不少,特别是对于回调函数,会让代码更清晰简洁。

    expression

    让我们来写一个最简单的arrows。

    var sum = (a, b) => a + b; //此为expression
    ------编译后-------
    var sum = function (a, b) {
    	return a + b;
    };
    

    从上面的代码,可以看到,大致是差不多的,我们把function变成了=>,然后将arguments写在括号里(若参数只有一个,则不需要括号。但没有参数,还是需要一个空括号的,切记)。还有要注意这样的expression写法,是仅仅支持单行且自动生成return的。

    statement

    这次我们写一个带有回调函数的arrows。

    numbers.forEach(num => {
    	if(num % 5 === 0){
    		fiveTimesArr.push(num);
    	}
    })
    ------编译后------
    numbers.forEach(function (num) {
    	if (num % 5 === 0) {
    		fiveTimesArr.push(num);
    	}
    });
    

    可以看到,编译后是不存在return的,若需要返回这个数组需要手动添加。

    Lexical this

    最后来看看,最酷炫的this,我们看一下在arrows里this的表现。

    var obj = {
    	key1: 'value1',
    	key2: [1, 2, 3, 4, 5],
    	func() {
    		this.key2.forEach(item =>console.log(this.key1));
    	}
    }
    ------编译后------
    var obj = {
    	key1: "value1",
    	key2: [1, 2, 3, 4, 5],
    	func: function func() {
    		var _this = this;
    
    		this.key2.forEach(function (item) {
    			return console.log(_this.key1);
    		});
    	}
    };
    

    可以看到,在forEach函数里,this自动绑定为obj中的this,这个特性,可以让我们免于非常多的烦恼。当然如果我们确实是需要回调中的this,则可以不使用arrows。直接使用我们最熟悉的原生函数即可。

    最后在看一个例子来感受arrows带来的爽快的编程体验吧。

    var square = arr =>
    	arr.map(num => num * num);
    ------编译后------
    var square = function (arr) {
    	return arr.map(function (num) {
    		return num * num;
    	});
    };
  • 相关阅读:
    .NET面试题解析(07)-多线程编程与线程同步
    .NET面试题解析(06)-GC与内存管理
    .NET面试题解析(05)-常量、字段、属性、特性与委托
    .NET面试题解析(04)-类型、方法与继承
    .NET面试题解析(03)-string与字符串操作
    .NET面试题解析(02)-拆箱与装箱
    .NET面试题解析(01)-值类型与引用类型
    StackExchange.Redis使用配置
    X--名称空间详解
    深入浅出话资源
  • 原文地址:https://www.cnblogs.com/YikaJ/p/4311425.html
Copyright © 2011-2022 走看看