1、箭头函数

在es6中,单一参数的单行箭头函数语法结构可以总结如下:

const 函数名 = 传入的参数 => 函数返回的内容,因此针对于

const pop = arr => arr.pop(),其中 pop是函数名, arr是传的参数 , =>之后的内容是函数返回的内容,该函数相当于:

var pop = function(arr){
   arr.pop()
}

            //箭头函数
const add1 = (a,b) => a+b;
console.log(add1(2,2)); //4 const add2 = function(a,b){
return a+b;
}
console.log(add2(2,2)); //4

2、函数体为多行时的写法

            //函数体为多行时
const add3 = (a,b) => {
a += 1;
return a + b;
};
console.log(add3(2,2)); //5 const add4 = function(a,b){
a += 1;
return a + b;
}
console.log(add4(2,2)); //5

3、不需要返回值时

            //有时候不需要返回值,但是语句只有一条,偏偏这个语句有返回值
//只有一个参数时可以不用带括号
//对arr数组调用pop方法,返回值是被pop掉的最后一项
const pop = arr => arr.pop();
console.log(pop([1,2,3])); //3 //并不希望有返回值3
//法一:void关键字
const pop1 = arr => void arr.pop1(); //undefined //法二:将箭头函数写成多行的形式
const pop2 = arr => {
arr.pop();
};
console.log(pop2([1,2,3])); //undefined

4、箭头函数与普通函数的第一个区别:没有arguments

            //箭头函数与普通函数的第一个区别:没有arguments对象,要用扩展运算符去接收参数
const log = () => {
//console.log(arguments); //报错 arguments is not defined
};
log(1,2,3);
//箭头函数要用扩展运算符去接收参数
const log1 = (...args) => {
console.log(args); //[1,2,3]
};
log1(1,2,3);

5、箭头函数与普通函数的第二个区别:它没有自己的this

            //箭头函数与普通函数的第二个区别:它没有自己的this,箭头函数的this是自身所处环境的那个this
const xiaoming = {
name:'小明',
say1: function(){
console.log(this);
},
say2: () => { //say2虽然在xiaoming里面,但是它没有自己的this,它是和xiaoming同一级的;xiaoming又在window里面,所以say2和xiaoming一样指向window
console.log(this);
}
}
xiaoming.say1(); //name
xiaoming.say2(); //window

6.1、通过闭包的特性保留this

            const xiaohong = {
name:'xiaohong',
age:null,
getAge: function(){
//通过保留this的方式,通过闭包的特性去拿this
let _this = this
//...ajax
setTimeout(function(){
_this.age = 14;
//console.log(this); //window
console.log(_this); //xiaohong
},1000);
}
}
xiaohong.getAge();

6.2、同样的对象用箭头函数表达

            //在某个回调当中要去访问this上某个属性的问题
//同样的对象xiaohong,用箭头函数表达:
const xiaohong1 = {
name:'xiaohong1',
age:null,
getAge:function(){
//...ajax
setTimeout(() => {
//这个this就是这个函数在定义时所处环境的this。这里的回调函数定义的时候就是getAge的this,getAge的this就是指向xiaohong1的
this.age = 14;
console.log(this); //xiaohong1
},1000);
}
};
xiaohong1.getAge();

7、在es6中,如果只有一行语句,且不加大括号时,默认会将这条语句的结果返回出去。如果有多行语句,用大括号括起来的部分,如果想拿到返回值就必须用return关键字返回。这就是es6的解析机制,记住即可。

分别对应的es5如下:

8、闭包的作用就是让外部访问函数内部定义的变量。

其他补充:

1、箭头函数,一行且没有大括号的情况,是就可以省略return。

 箭头函数的函数体中只有一条语句的时候,默认在这条语句前添加了一个return,作为函数返回值。

2、单行箭头函数语法结构可以总结如下:

(1)const 函数名 = 传入的参数 => 函数返回的内容,因此针对const pop = arr => arr.pop(),其中 pop是函数名, arr是传的参数 , =>之后的内容是函数返回的内容

3、箭头函数与普通函数的区别:

(1)箭头函数是匿名函数,不能作为构造函数,不能使用new

(2)箭头函数不能绑定arguments,取而代之用rest参数...解决

(3)箭头函数没有原型属性

(4)箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this值。而普通函数的this指向调用它的对象,this是最大的区别,也就是作用域。

4、ES6语法规定,let声明的变量属于块级作用域,不会挂载在任何对象上。

5、普通函数中,谁调用了函数,this指向谁。由于windows调用了定时器,所以this指向window。

不用箭头函数时,this指向函数的调用者。代码中,定时器在1s后执行,此时是window调用的,所以它里面的this指向的就是window。

箭头函数中的this是在函数创建时就会绑定,例如本代码中,定时器是在getAge方法中创建的,所以它里面的this绑定的就是getAge方法中的this。

6、

箭头函数没有自己的this,它的this是继承而来,默认指向在定义它时所处的对象(宿主对象)。

所以箭头函数内声明的变量实际上相当于在外部声明, 这时候箭头函数内部的this也是指向window的。

ES6扩展——箭头函数的更多相关文章

  1. ES6中箭头函数的作用

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

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

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

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

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

  4. 关于ES6-{块级作用域 let const 解构赋值 数组 字符串 函数的扩展 箭头函数}

    关于ES6 块级作用域 任何一对花括号({})中的语句集都属于一个块,在块中声明的变量在代码块外都是不可访问的,称之为块级作用域,ES5以前没有块级作用域 let let 是ES6新增的声明变量的一种 ...

  5. Es6 之箭头函数 初学

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

  6. 关于es6的箭头函数使用与内部this指向

    特型介绍:箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. 'use strcit'; let arr = [1,2,3]; //ES5 let es5 = arr.m ...

  7. ES6笔记② 箭头函数

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

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

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

  9. 进阶路上有你我-相互相持篇之ES6里箭头函数里的this指向问题

    首先复习下普通函数里的this指向: function test(){ console.log(this) } test() 你会秒杀的毫无疑问的回答:window,针对普通函数:谁调用了函数  函数 ...

随机推荐

  1. PAT乙级:1083 是否存在相等的差 (20分)

    PAT乙级:1083 是否存在相等的差 (20分) 题干 给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数字相减(大减小), ...

  2. Leetcode:1305. 两棵二叉搜索树中的所有元素

    Leetcode:1305. 两棵二叉搜索树中的所有元素 Leetcode:1305. 两棵二叉搜索树中的所有元素 思路 BST树中序历遍有序. 利用双指针法可以在\(O(n)\)的复杂度内完成排序. ...

  3. .net 5+ 知新:【1】 .Net 5 基本概念和开发环境搭建

    最近一两年搞了很多其它事情,.net web方面的基本没做,之前做过几个小的项目零星的学习了些,从.net core 发布后其实都没正真的系统学习过. 就是上手做项目,平时也有关注和看些资料,所以项目 ...

  4. R在ubuntu16.04上环境搭建

    1.R安装 sudo apt-get update sudo apt-get remove vim-common sudo apt-get install vimapt-cache show r-ba ...

  5. 使用ThinkPHP5.0.12连接Mongo数据库的经验

    本地开发环境xamppv3.2.2,ThinkPHP5.0.12版本. 由于之前开发项目时使用的是TP3.2.3+mongo数据库,也是在本地进行的,所以也进行过mongo数据库驱动的配置.详细方法可 ...

  6. 网络损伤仪WANsim的带宽限制功能

    带宽限制功能 带宽限制功能是网络损伤仪WANsim的第一项损伤功能.进入WANsim的报文首先会经过报文过滤器的处理,随后,就会进入带宽限制. 点击虚拟链路,就可以进入网络损伤界面,对报文进行带宽限制 ...

  7. node.js背后的引擎V8及优化技术

    本文将挖掘V8引擎在其它方面的代码优化,如何写出高性能的代码,及V8的性能诊断工具.V8是chrome背后的javascript引擎,因此本文的相关优化经验也适用于基于chrome浏览器的javasc ...

  8. spring的属性注入和构造器注入

    spring在向IOC容器中注入Bean的时候,有三种注入方式: 属性注入构造器注入工厂方法注入平常中用到的前两种方法较多,下面对前两种方法举例.一.属性注入1.创建一个car类,作为注入的bean ...

  9. sql server 查看数据库配置等信息(字符集,编码格式,版本号...)

    select SERVERPROPERTY(N'edition') as Edition --数据版本,如企业版.开发版等,SERVERPROPERTY(N'collation') as Collat ...

  10. Jenkins(8080)未授权访问

    下载地址http://mirrors.jenkins.io/debian/ 测试 浏览器访问http://localhost:8080/manage可以直接访问 点击脚本命令行 println &qu ...