<=这个大家都知道是小于等于,那么=>是什么呢?今天我们就来探究一下ES6的新特新-----胖箭头函数。

其他语言的函数定义都是很简洁的,但是为什么javaScript的就那么复杂呢?还必须带function关键字,这是一直令我很困惑的一个问题,还好ES6为我们解了这个问题,它定义的箭头函数不仅省略了function和return,甚至连一些小括号,大括号和分号都省略了,这种极简主义风格简直美不可言。

// ES5
array.filter(function(ele){
return ele - 100;
});
// ES6
array.filter(ele => ele-100);

箭头函数也可以接收多个参数,或者没有参数,或者是不定参数,默认参数,解构参数,这时需要要()将参数列表扩起来。

// ES5
array.reduce(function(a, b){
return a + b;
},0);
// ES6
array.reduce((a,b) => a + b, 0);
// 没有参数
setTimeout(() => {alert("dog")},1000);

如果函数体有多条语句,可也用{}扩起来,注意这时语句块不会自动返回值,需要使用return。

array.reduce((a,b) =>{
a++;
return a + b;
} , 0);

当要使用箭头函数创建对象的时候,需要将对象包括在()里,因为它会将这里的{}解析成语句块。

var chewToys = puppies.map(puppy => {}); // 这样写会报Bug!
var chewToys = puppies.map(puppy => ({})); //

胖箭头函数this的使用

胖箭头函数没有constructor方法,也没有prototype,所以不支持new操作。

它也没有自己的this值,箭头函数的this值继承自外围作用域。

// ES5,我们以前可能写过这样的hack
var obj = {
eatInTime:function(){
var self = this;
setTimeout(function(){
self.eat();
},1000);
},
eat:function(){
console.log("eat");
}
};
// ES6,现在我们可以这样简写
var obj = {
eatInTime:function(){ setTimeout(() => this.eat(),1000);
},
eat:function(){
console.log("eat");
}
};

特别需要注意的一点是外围作用域,当我们用箭头函数定义方法的时候。

var i = 1134;
var obj = {
i: 123,
output:() => console.log(this.i)
};
obj.output();//1134,指向外围作用域 var i = 1134;
var obj = {
i: 123,
output:function(){
console.log(this.i);
}
};
obj.output();//123,指向对象本身

箭头函数的this值还是在定义时候指定的,而不是在执行时指定的,甚至我们不能通过call和apply改变这个事实。

var i = 1134;
var obj = {
i: 123,
output:() => console.log(this.i)
};
obj.output(); //1134
obj.output.call(obj); //1134,仍然指向外围作用域

以上就是ES6箭头函数使用要注意的地方。

ES6新特新之箭头函数使用细节的更多相关文章

  1. 深入浅出ES6(七):箭头函数 Arrow Functions

    作者 Jason Orendorff  github主页  https://github.com/jorendorff 箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教 ...

  2. ES6入门五:箭头函数、函数与ES6新语法

    箭头函数的基本用法与特点 函数与ES6新语法 一.箭头函数的基本用法与特点 声明箭头函数采用声明变量和常量的关键字:var.let.const 箭头函数的参数:没有参数用"()"空 ...

  3. ES6 箭头函数中的 this?你可能想多了(翻译)

    箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...

  4. ES6 有什么新东西

    ES6 有什么新东西? 你可能已经听说过 ECMAScript 6 (简称 ES6)了.ES6 是 Javascript 的下一个版本,它有很多很棒的新特性.这些特性复杂程度各不相同,但对于简单的脚本 ...

  5. Es6 之箭头函数 初学

    不积跬步,无以至千里;不积小流,无以成江海! // ES5 var selected = allJobs.filter(function (job) { return job.isSelected() ...

  6. ES6中箭头函数的作用

    我们知道在ES6中,引入了箭头函数,其本质就是等同有ES5中的函数.类似于下面的写法: let test1=() => “abc”; let test2=() => { return “a ...

  7. 箭头函数 Arrow Functions/////////////////////zzz

    箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教程曾建议在HTML注释内包裹行内脚本,这样可以避免不支持JS的浏览器误将JS代码显示为文本.你会写这样的代码: < ...

  8. 廖雪峰js教程笔记5 Arrow Function(箭头函数)

    为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: function (x) { return x * x; } 箭头函数 阅读: ...

  9. this的绑定(四种绑定)+ 箭头函数 的this

    一.this的默认绑定 当一个函数没有明确的调用对象的时候,也就是单纯作为独立函数调用的时候,将对函数的this使用默认绑定:绑定到全局的window对象 例子1: function foo(){ c ...

随机推荐

  1. RobotFramework自动化测试框架-移动手机自动化测试Clear Text关键字的使用

    Clear Text关键字用来清除输入框的数据,该关键字接收一个参数[ locator ],这里的locator指的就是界面元素的定位方式. 示例1:Clear Text清除输入框数据时,采用reso ...

  2. Java实现CORS跨域请求

    问题 使用前后端分离模式开发项目时,往往会遇到这样一个问题 -- 无法跨域获取服务端数据 这是由于浏览器的同源策略导致的,目的是为了安全.在前后端分离开发模式备受青睐的今天,前端和后台项目往往会在不同 ...

  3. 【JVM命令系列】jstack

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...

  4. 简易RPC框架-心跳与重连机制

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  5. 关于逆元的概念、用途和可行性的思考(附51nod 1013 和 51nod 1256)

    [逆元的概念] 逆元和单位元这个概念在群中的解释是:  逆元是指数学领域群G中任意一个元素a,都在G中有唯一的逆元a',具有性质a×a'=a'×a=e,其中e为该群的单位元. 群的概念是:  如果独异 ...

  6. http://codeforces.com/contest/845

    A. Chess Tourney time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  7. Array Partition I

    Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1 ...

  8. JavaScript 版数据结构与算法(一)栈

    今天,我们要讲的是数据结构与算法中的栈. 栈的简介 栈是什么?栈是一个后进先出(LIFO)的数据结构.栈有啥作用?栈可以模拟算法或生活中的一些后进先出的场景,比如: 十进制转二进制,你需要将余数倒序输 ...

  9. vim 环境设定(通用)

    有没有发现,如果我们以 vim 软件来搜寻一个档案内部的某个字符串时,这个字符串会被反白,而下次我们再次以 vim 编辑这个档案时,该搜寻的字符串反白情况还是存在呢!甚至于在编辑其他档案时,如果其他档 ...

  10. jdbc-日期格式的转换及代码示例

     时间类型相互转换 把数据库的三种时间类型赋给java.util.Date,基本不用转换,因为这是把子类对象给父类的引用,不需要转换. java.sql.Date date = - java.ut ...