es6箭头函数的用法

箭头函数是es6的一种函数的简写方法。

如下:

var f = v = > v;
//等同于
var f = function(v){
return v;
}
var sum = (num1,num2) => num1+num2 ;
//等同于
var sum = function(num1,num2){
return num1+num2
}
[1,2,3].map(function (x) {
return x * x;
});
// 箭头函数写法
[1,2,3].map(x => x * x);//简洁了许多

从例子我们可以看出,省略了function,花括号‘{}’用‘=>’代替了。这种写法更简洁了。

除了简洁之外,箭头函数还有另外一个优点,就是函数体内的this的指向始终是指向定义它所在的对象,而不会指向调用它的对象,我们知道es5中的函数是谁执行它,它就指向谁。

es5  eg:

var countdown ={
'count':10,
'str':'hello!!!',
showstr(){
var _this = this;
var dom = document.getElementById('dom');
dom.innerHTML= _this.todouble(this.count);
setInterval(function(){
var dom=document.getElementById('dom');
dom.innerHTML=_this.todouble(_this.count);
_this.count --;
if(_this.count <0){
dom.innerHTML=_this.str;
}
},1000)
},
todouble(t){
var t = parseInt(t);
if(t<10){
return '0'+t;
}else{
return t;
}
}
}
countdown.showstr();

如上是一个倒计时完之后显示一个hello文本的效果,在setInterval里面,如果我们直接写this的话,这个this是指向window的。因此我们需要在setInterval函数之前先保存_this = this;

当我们使用es6的箭头函数的时候,就可以直接使用this了

es6  eg:

     //es6的写法。
var countdown ={
'count':10,
'str':'hello!!!',
showstr(){
var dom = document.getElementById('dom');
dom.innerHTML= this.todouble(this.count);
setInterval(() => {
dom.innerHTML= this.todouble(this.count);;
this.count --;
if(this.count <0){
dom.innerHTML=this.str;
return false;
}
},1000)
},
todouble(t){
var t = parseInt(t);
if(t<10){
return '0'+t;
}else{
return t;
}
}
}
countdown.showstr();

上面同样的代码改成箭头函数之后我们在setInterval里面就可以直接使用this了。

箭头函数里面的this装换成es5后的代码如下:

// ES6
function fn() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
}
// ES5
function fn() {
var _this = this;
setTimeout(function () {
console.log('id:', _this.id);
}, 100);
}

上面代码中,转换后的ES5版本说明了,箭头函数里面根本没有自己的this,而是引用外层的this,由于箭头函数没有自己的this,所以也就不能用call()apply()bind()这些方法去改变this的指向。

箭头函数使用的注意的地方:

(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。因为箭头函数的this是由定义它的对象决定的,对象的构造函数是顶层的,它的外层,没有this可以传进去给箭头函数使用。

(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。

(4)不可以使用yield命令,因此箭头函数不能用作Generator函数。

es6箭头函数讲解的更多相关文章

  1. es6箭头函数 this 指向问题

    es5中 this 的指向 var factory = function(){ this.a = 'a'; this.b = 'b'; this.c = { a:'a+', b:function(){ ...

  2. ES6 — 箭头函数

    一 为什么要有箭头函数 我们在日常开发中,可能会需要写类似下面的代码 const Person = { 'name': 'little bear', 'age': 18, 'sayHello': fu ...

  3. 前端分享----JS异步编程+ES6箭头函数

    前端分享----JS异步编程+ES6箭头函数 ##概述Javascript语言的执行环境是"单线程"(single thread).所谓"单线程",就是指一次只 ...

  4. ES6 箭头函数 this 指向

    ES6 箭头函数 this 指向 箭头函数有几个使用注意点: 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个 ...

  5. ES6 箭头函数(Arrow Functions)

    ES6 箭头函数(Arrow Functions) ES6 可以使用 "箭头"(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 具有一个参数的简单函 ...

  6. ES6箭头函数基本用法

    ES6箭头函数基本用法 ``` window.onload = function(){ alert(abc); } //箭头函数 window.onload = ()=>{ alert(&quo ...

  7. ES6 箭头函数this指向问题

    var name = "window"; var person1 = { name: "person1", show1: function() { consol ...

  8. Vue ES6箭头函数使用总结

    Vue ES6箭头函数使用总结   by:授客 QQ:1033553122   箭头函数 ES6允许使用“箭头”(=>)定义函数: 函数不带参数 定义方法:函数名称 = () => 函数体 ...

  9. ES6 -箭头函数 ,对象的函数解构

    ES6 -箭头函数: //es6 中的箭头函数和扩展 //es5的写法 // function add(a,b){ // return a + b; // } // add(1,2); //3 fun ...

随机推荐

  1. [2016-07-15]nuget包管理器控制台下的powershell脚本介绍

    博客有阵子没打理了,今天刚恢复样式,但是标题还是不太正常,总算能凑合看看. 回到正题,最近为了能在VS的程序包管理器控制台上能方便的自定义ps脚本去调整project的package,就开始看powe ...

  2. 关于idea的使用心得

    开发java多年,所在的项目组一直都在使用的eclipse或者myeclipse,今天偶然的机会接触到了idea,感觉优化的确实不错,下面是我的一些使用心得:

  3. 7-zip 解压

    7-zip 解压 1.引入依赖文件 sevenzipjbinding.jar sevenzipjbinding-Allwindows.jar <!-- https://mvnrepository ...

  4. Gvim安装nerd_tree插件

    1.先去官网下载nerd_tree插件 http://www.vim.org/scripts/script.php?script_id=1658 2.解压缩将nerd_tree目录下的doc目录和pl ...

  5. Web桌面应用框架2:著名的WEB桌面应用分析

    前一篇文章里,分析了包括NW.js和electron这种纯JS框架在内的几种Web桌面应用开发方式,实际上还有一种最古老的方式,那就是嵌入WebView的方式. 嵌入WebView的方式和整个程序都是 ...

  6. 九九乘法表实现---基于python

    # coding:utf-8"""九九乘法表"""for k in range(1,10):    for i in range(1,k+1 ...

  7. poj2914无向图的最小割模板

    题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...

  8. 详解 mpls vpn 的实现

    MPLS VPN的实现 一.实验目的 该实验通过MPLS VPN的数据配置,使学生掌握路由器相关接口的IP地址设置.路由协议的配置以及MPLS VPN的完整的创建过程, 从而加深对IP网络的IP编址. ...

  9. 团队作业4——第一次项目冲刺(Alpha版本)

    Deadline: 2017-4-30 22:00PM,以博客发表日期为准 评分基准: 按时交 - 有分,检查的项目包括后文的两个个方面 七天的敏捷冲刺 日志的集合贴 晚交 - 0分 迟交一周以上 - ...

  10. 第二次项目冲刺(Beta阶段)--第六天

    一.站立式会议照片 二.项目燃尽图 三.项目进展 1.继续完成docx文件的读取,听取助教的意见采用原型法,先简单写了一个可运行的docx文件的读取类,还是无法实现docx的读取,异常,但是该导入的j ...