ES6新特新之箭头函数使用细节
<=这个大家都知道是小于等于,那么=>是什么呢?今天我们就来探究一下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新特新之箭头函数使用细节的更多相关文章
- 深入浅出ES6(七):箭头函数 Arrow Functions
作者 Jason Orendorff github主页 https://github.com/jorendorff 箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教 ...
- ES6入门五:箭头函数、函数与ES6新语法
箭头函数的基本用法与特点 函数与ES6新语法 一.箭头函数的基本用法与特点 声明箭头函数采用声明变量和常量的关键字:var.let.const 箭头函数的参数:没有参数用"()"空 ...
- ES6 箭头函数中的 this?你可能想多了(翻译)
箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...
- ES6 有什么新东西
ES6 有什么新东西? 你可能已经听说过 ECMAScript 6 (简称 ES6)了.ES6 是 Javascript 的下一个版本,它有很多很棒的新特性.这些特性复杂程度各不相同,但对于简单的脚本 ...
- Es6 之箭头函数 初学
不积跬步,无以至千里;不积小流,无以成江海! // ES5 var selected = allJobs.filter(function (job) { return job.isSelected() ...
- ES6中箭头函数的作用
我们知道在ES6中,引入了箭头函数,其本质就是等同有ES5中的函数.类似于下面的写法: let test1=() => “abc”; let test2=() => { return “a ...
- 箭头函数 Arrow Functions/////////////////////zzz
箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教程曾建议在HTML注释内包裹行内脚本,这样可以避免不支持JS的浏览器误将JS代码显示为文本.你会写这样的代码: < ...
- 廖雪峰js教程笔记5 Arrow Function(箭头函数)
为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: function (x) { return x * x; } 箭头函数 阅读: ...
- this的绑定(四种绑定)+ 箭头函数 的this
一.this的默认绑定 当一个函数没有明确的调用对象的时候,也就是单纯作为独立函数调用的时候,将对函数的this使用默认绑定:绑定到全局的window对象 例子1: function foo(){ c ...
随机推荐
- YYHS-NOIP2017Training0921-逆光
题目描述 有一束光/那瞬间/是什么痛得刺眼/你的视线是谅解/为什么舍不得熄灭/我逆着光却看见/那是泪光/那力量/我不想再去抵挡/面对希望/逆着光/感觉爱存在的地方/一直就在我身旁 Descriptio ...
- String... args 和 String[] args 的区别
public static void main(String[] args) { callMe1(new String[] { "a", "b", " ...
- 再探Spring IOC
这次做了提纲 下面再来一个case study case描述: 这是工具类 //bean的配置信息略去 class MyUtil{ private static UserDao userDao; p ...
- Storm同步调用之DRPC模型探讨
摘要:Storm的编程模型是一个有向无环图,决定了storm的spout接收到外部系统的请求后,spout并不能得到bolt的处理结果并将结果返回给外部请求.所以也就决定了storm无法提供对外部系统 ...
- MMORPG战斗系统随笔(二)、浅谈场寻路Flow Field PathFinding算法
转载请标明出处http://www.cnblogs.com/zblade/ 今天给大家带来一篇游戏中寻路算法的博客.去年,我加入一款RTS的游戏项目,负责开发其中的战斗系统,战斗系统的相关知识,属于游 ...
- (1)pygame_第一个窗口程序
####可以使用python自带的IDLE交互式开发,也可以借助其他的编辑器,我这里采用的pycharm编辑器 1.导入我们所需要的模块 import pygame,sys --导入我们需要的模块 ...
- Keyboard Row
Given a List of words, return the words that can be typed using letters of alphabet on only one row' ...
- Hadoop(三)手把手教你搭建Hadoop全分布式集群
前言 上一篇介绍了伪分布式集群的搭建,其实在我们的生产环境中我们肯定不是使用只有一台服务器的伪分布式集群当中的.接下来我将给大家分享一下全分布式集群的搭建! 其实搭建最基本的全分布式集群和伪分布式集群 ...
- cellForItemAtIndexPath没有调用
前几天碰到cellForItemAtIndexPath这个数据源方法没有被调用.这是一个collectionView返回cell(item)的数据源方法. 它没有被调用的原因有下: 1.没有设置del ...
- WPF通过代码动态的加载样式
tabitem.SetResourceReference(TabItem.StyleProperty, "mainTabItemStyle"); tabitem.Content = ...