特型介绍:箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法。

'use strcit';
let arr = [1,2,3];
//ES5
let es5 = arr.map(function(n){
return n*2;
});
//ES6
let es6 = arr.map(n => n*2);
console.log(es5); //[2,4,6]
console.log(es6); //[2,4,6]

箭头函数简化了原先的函数语法,不需要再写 function ,如果函数体只有一行代码的话连 return 都不用写,这个特性对于热衷于简化流程和工作的程序员来说相当对胃口。

箭头函数支持两种模式的函数体写法,我们姑且叫他简洁函数体和块级函数体。

'use strcit';
// 简洁函数体
let fn = x => x * x; // 块级函数体
let fn = (x, y) => {return x + y;};

简介函数体默认会把表达式的结果返回,块级函数体需要手动 return 。如果想要返回一个对象又想使用简洁函数体的话,需要这么写:

'use strcit';
let fn = () => ({});
fn(); // {}

如果写成 var fn = () => {} ,那么执行 fn() 只能返回 undefined 。

'use strict';
//第一种
let Person = function(){
this.age = 2;
let that = this;
setTimeout(function(){
     that.age++;
console.log(that.age);
},1000);
}; //第二种
let Person = function(){
this.age = 2;
setTimeout(function(){
     this.age++;
console.log(this.age);
}.bind(this),1000);
};
new Person();

之前我们想操作setTimeout参数function内部的this可能会用上述两种方法,看上去不错了, 但是现在有了箭头函数就不一样了,代码如下:

'use strict';
let Person = function(){
this.age = 2;
setTimeout(() => {
     this.age++;
console.log(this.age);
},1000);
};
new Person();  

由于箭头函数已经绑定了this 的值,即使使用apply或者call也不能只能起到传参数的作用,并不能强行改变箭头函数里的this。

'use strict';
let obj = {
x:1,
show1:function(y){
let fn = y => y+this.x;
return fn(y);
},
show2:function(y){
let fn = v => v + this.x;
let whatever = {
x: 2
};
return fn.call(whatever, y);
}
};
console.log(obj.show1(1)); //
console.log(obj.show2(2)); //

箭头函数不能与new 关键字一起使用,会报错

'use strict';
let Fn = () => {
this.a = 1;
};
let f = new Fn(); // Error

关于es6的箭头函数使用与内部this指向的更多相关文章

  1. ES6学习--箭头函数

    1. 箭头函数基本形式 let func = (num) => num; let func = () => num; let sum = (num1,num2) => num1 + ...

  2. es6的箭头函数和es5的function函数区别

    一.es6的箭头函数es6箭头函数内部没有this,使用时会上朔寻找最近的this不可以做构造函数,不能使用new命令,因为没有this函数体内没有arguments,可以使用rest参数代替不能用y ...

  3. 关于ES6 用箭头函数后的 this 指向问题

    最近写完小程序后, 开始学习React, 因为有编译器, 就直接用ES6 新语法了, 中间自然离不开  () => { console.log('箭头函数的this是指向哪的问题')}; var ...

  4. ES6中箭头函数的作用

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

  5. ES6之箭头函数中的this

    在讲箭头函数中的this之前我们先介绍一下普通函数中的this.      普通函数中的this: (1)this指向它的直接调用者 (2)默认的,非严格模式下,没找到直接调用者则指向window ( ...

  6. Es6中箭头函数与普通函数的区别

    Es6中箭头函数与普通函数的区别? 普通function的声明在变量提升中是最高的,箭头函数没有函数提升 箭头函数没有属于自己的this,arguments 箭头函数不能作为构造函数,不能被new,没 ...

  7. ES6中箭头函数与普通函数this的区别

    普通函数中的this: 1. this总是代表它的直接调用者, 例如 obj.func ,那么func中的this就是obj 2.在默认情况(非严格模式下,未使用 'use strict'),没找到直 ...

  8. ES6笔记② 箭头函数

    特性介绍 箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. //ES5 function fun(x,y){ return x+y; } console.log(fun ...

  9. 初步探究ES6之箭头函数

    今天要介绍的是ES6中的箭头函数. 语法 我们先来看看箭头函数的语法: ([param] [, param]) => { statements } param => expression ...

随机推荐

  1. jquery事件之event.target用法详解

    1. 定义和用法: 显示哪个 DOM 元素触发了事件: $("p, button, h1, h2").click(function(event){ $("div" ...

  2. 浅谈JS DDoS攻击原理与防御

    分布式拒绝服务攻击(DDoS)攻击是一种针对网站发起的最古老最普遍的攻击.Nick Sullivan是网站加速和安全服务提供商CloudFlare的一名系统工程师.近日,他撰文介绍了攻击者如何利用恶意 ...

  3. MacOS快捷键

  4. Android 判断是否联网 是否打开上网

    ConnectivityManager cwjManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); ...

  5. AVOIR发票的三种作用

    1. 开错了发票,应收多写了,应该抵消掉一部分应收2. 客户临时有变化,比如只买一部分产品,取消了另一部分,那么也是开AVOIR抵消了一部分应收3. 退钱给客户的时候,也要开一张AVOIR发票 注意, ...

  6. MSBuild 教程(2)

    如果你没有看过第一部分教程,请先看完后再回到这里来继续我们的第二部分. 我们下一步的工作是发布我们的网站,也就是创建Publish target. 为了能使我们的target工作,我们需要给它传递两个 ...

  7. 【ajax】reqwest

    ded / reqwest All over again. Includes support for xmlHttpRequest, JSONP, CORS, and CommonJS Promise ...

  8. HDU-4925 Apple Tree

    http://acm.hdu.edu.cn/showproblem.php?pid=4925 Apple Tree Time Limit: 2000/1000 MS (Java/Others)     ...

  9. Hibernate(五)一对一单向关联映射

    上次的博文中 Hibernate从入门到精通(四)基本映射我们已经讲解了一下基本映射和相关概念,接下来 我们会讲稍微复杂点的映射——关系映射. 关系映射分类 关系映射即在基本映射的基础上处理 多个相关 ...

  10. c语言运算符号详细说明

    C语言中具有右结合性的运算符包括所有单目运算符以及赋值运算符(=)和条件运算符.其它都是左结合性. 判断表达式计算顺序时,先按优先级高的先计算,优先级低的后计算,当优先级相同时再按结合性,或从左至右顺 ...