箭头函数是es6新增的非常有意思的特性,初次写起来,可能会觉得别扭,习惯之后,会发现很精简.

什么是箭头函数?

箭头函数是一种使用箭头( => )定义函数的新语法, 主要有以下特性:

  • 不能通过new关键字调用
  • 没有原型, 因为不能通过new调用,所以没有原型
  • 没有this, super,arguments和new.target绑定, new.target和super关键字是es6新增的
  • 箭头函数中的this,取决于他的上层非箭头函数的this指向
  • 没有arguments对象,但是可以获取到外层函数的arguments
  • call,apply,bind不能改变箭头函数的this指向

箭头函数语法由函数参数、箭头、函数体组成.

第一种形式: 没有参数的写法

         /*
(): 空括号代表: 没有传递参数
函数体: console.log( 'ghostwu' ), 只有这一句话,可以不加花括号{}
*/
let show = () => console.log( 'ghostwu' );
show();
          //函数体只有一句话,当然也可以加花括号
let show = () => { console.log( 'ghostwu' ); }
show();

第二种形式: 带一个参数的写法

         /*
第一个a 表示 参数a
第二个a 表示函数体a, 相当于 return a
*/
let show = a => a;
console.log( show( 10 ) );
         //如果函数体加了花括号,要用return
let show = a => { return a; };
console.log( show( 10 ) );
         // 当然也可以加小括号
let show = (a) => { return a; };
console.log( show( 10 ) );
         // let show = ( a ) => console.log( a );
// show( 100 ); //100 // 当函数体有return的时候,必须要加花括号
let show = ( a ) => return a; //错误

第三种形式: 带2个以上参数的写法

         //当函数有2个以上参数的时候,一定要用小括号
// let add = ( a, b ) => a + b;
// console.log( add( 10, 20 ) ); //30 // let add = a, b => a + b; //错误
// console.log( add( 10, 20 ) ); //有return需要加花括号
// let add = (a, b) => return a + b; //错误
// console.log( add( 10, 20 ) ); // let add = (a, b) => console.log( a + b );
// add( 10, 20 ); //30 // let add = ( a, b ) => { return a + b; };
// console.log( add( 10, 20 ) ); //30

返回值如果是对象:

         //返回值是对象,为了以示区分,用小括号
let show = name => ( { 'user' : name } );
let oUser = show( 'ghost' );
console.log( oUser.user );
          //用了return关键字,要用花括号{}
let show = name => { return { 'user' : name } };
let oUser = show( 'ghostwu' );
console.log( oUser.user );
         //对象与传参用法
let show = ( name, age ) => {
return {
'uName' : name,
'uAge' : age
};
}
let oUser = show( 'ghostwu', 22 );
console.log( oUser.uName , oUser.uAge ); //ghostwu, 22

立即表达式的写法:

         //立即表达式的写法
let oUser = ((name, age)=>{
return {
"uName" : name,
"uAge" : age
}
})('ghostwu', 25 );
console.log( oUser.uName , oUser.uAge );

箭头函数不能new

         let User = () => 'ghostwu';
console.log( User() );
console.log( new User() ); //报错,箭头函数不能new

箭头函数中的this,取决于他的上层非箭头函数的this指向

          //this指向他的外层window
// var a = 10;
// let user = () => {
// console.log( this.a ); //this->window
// }
// user(); //10
          // 箭头函数中的this取决于外层函数的this
function User( name ) {
this.name = name;
this.getName = () => {
console.log(this); //this指向oUser
return this.name;
};
}
var oUser = new User( 'ghostwu' );
console.log( oUser.getName() );

箭头函数可以简化数组的处理

         //箭头函数简化数组处理
// let arr = [10,100,0,3,-5];
// arr.sort( ( a, b ) => a - b );
// arr.sort( ( a, b ) => b - a );
// console.log( arr );

箭头函数取到的是外层的arguments

         let show = function( name ){
return () => arguments[0]; // ghostwu, 箭头函数获取到的是外层的arguments
}
let fn = show( 'ghostwu' );
console.log( fn() );

call,bind,apply都不能改变箭头函数中this的指向

         var n1 = 100;
var n2 = 200;
let add = () => {
return this.n1 + this.n2;
};
console.log( add.call( null ) ); //
console.log( add.apply( null ) );//
console.log( add.bind( null )() );//

[js高手之路] es6系列教程 - 箭头函数详解的更多相关文章

  1. [js高手之路] es6系列教程 - 对象功能扩展详解

    第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...

  2. [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解

    接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般 ...

  3. [js高手之路] es6系列教程 - 迭代器与生成器详解

    什么是迭代器? 迭代器是一种特殊对象,这种对象具有以下特点: 1,所有对象都有一个next方法 2,每次调用next方法,都会返回一个对象,该对象包含两个属性,一个是value, 表示下一个将要返回的 ...

  4. [js高手之路] es6系列教程 - promise常见用法详解(resolve,reject,catch,then,all,race)

    关于promise我在之前的文章已经应用过好几次,如[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist,本文就来讲解下pro ...

  5. [js高手之路] es6系列教程 - 函数的默认参数详解

    在ES6之前,我们一般用短路表达式处理默认参数 function show( a, b ){ var a = a || 10; var b = b || 20; console.log( a, b ) ...

  6. [js高手之路] es6系列教程 - var, let, const详解

    function show( flag ){ console.log( a ); if( flag ){ var a = 'ghostwu'; return a; } else { console.l ...

  7. [js高手之路] es6系列教程 - 不定参数与展开运算符(...)

    三个点(...)在es6中,有两个含义: 用在形参中, 表示传递给他的参数集合, 类似于arguments, 叫不定参数. 语法格式:  在形参面前加三个点( ... ) 用在数组前面,可以把数组的值 ...

  8. [js高手之路]es6系列教程 - 解构详解

    解构通俗点说,就是通过一种特定格式,快捷的读取对象/数组中的数据的方法, es6之前,我们通过对象名称[键] 读取数据 var User = { 'name' : 'ghostwu', 'age' : ...

  9. [js高手之路] es6系列教程 - Set详解与抽奖程序应用实战

    我们还是从一些现有的需求和问题出发,为什么会有set,他的存在是为了解决什么问题? 我们看一个这样的例子,为一个对象添加键值对 var obj = Object.create( null ); obj ...

随机推荐

  1. phpcms和php格式化时间戳

    用PHPCMS V9 建站时,经常会用到时间标签,它是通用标签调用-日期时间格式化,适用全站. 一.日期时间格式化显示: a\标准型:{date('Y-m-d H:i:s', $rs['inputti ...

  2. oracle学习笔记(2)-基本术语

    oracle基本术语 先上图. 相当粗糙的一个图,可能有些地方不够精细,大致结构基本是对的. 逻辑结构上从大到小的依次为文件(file)->表空间(tablespace)->段(segme ...

  3. sql求和isnull注意事项

    如果不用isnull函数判断则计算出来如果有一列是null 则相加就是null,如 两列:1 null 1+null = nullselect sum(ISNULL(jinE,0)+ISNULL(qi ...

  4. Mysql按时间段分组查询

    Mysql按时间段分组查询来统计会员的个数,mysql个数 Mysql按时间段分组查询来统计会员的个数,mysql个数 1.使用case when方法(不建议使用)- 代码如下 复制代码SELECT ...

  5. AngularJS事件

    <body ng-app="myApp"> <div ng-controller="myCtrl"> <button ng-cli ...

  6. React 在服务端渲染的实现

    原文地址:Server-Side React Rendering 原文作者:Roger Jin 译者:牧云云 React 在服务端渲染的实现 React是最受欢迎的客户端 JavaScript 框架, ...

  7. js动态增加秒数(自动,手动)

    //获取当前的日期及时间Date var myDate = new Date();      myDate.getYear();        //获取当前年份(2位)      myDate.get ...

  8. 2017寒假零基础学习Python系列之函数之 编写函数

    定义一个函数用def语句 格式为:def + 函数名.括号.括号中的参数和冒号 比如定义一个求绝对值的函数: def my_abs(x): if x>= 0: return x else ret ...

  9. red hat 6.5 红帽企业Linux.6.5 yum This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. 解决办法

    1.删除redhat原有的yum rpm -aq|grep yum|xargs rpm -e --nodeps 2.下载yum安装文件 wget http://mirrors.163.com/cent ...

  10. MySQL缓存之Qcache与buffer pool对比

    Q:innodb buffer pool和Qcache的缓存区别? A: 1.Qcacche缓存的是SQL语句及对应的结果集,缓存在内存,最简单的情况是SQL一直不重复,那Qcache的命令率肯定是0 ...