特性介绍

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

//ES5
function fun(x,y){
return x+y;
}
console.log(fun(5,10));//15 //ES6
var fun6 = (x,y) => {return x+y;}
console.log(fun6(6,10));//

ES6简化了声明函数,不需要再写 function .

好像除了简化代码,并没有什么新奇的对不对,那我们往下慢慢看。

——————————————————————————————————————————————————————————

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

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

简介函数体默认会把表达式的结果返回,块级函数体需要手动 return 。

this指向

用function生成的函数会定义一个自己的 this ,而箭头函数没有自己的 this,而是会和上一层的作用域共享 this 。

//es5中,内层函数如果想用外层函数的this属性,必须先将this赋值self变量中,然后通过self取值。
function Person(){
this.a = 10;
var self= this;
return function(){
return self.a++;
}
}
var closure = Person();
console.log(closure());//10
console.log(closure());//11

如果使用箭头函数则省事很多,代码如下:

//会和上一层的作用域共享 this                           //再多套一层
function Person (){                              //function Person (){
this.a = 10;   this.a = 10;
return () => { return () => {
return this.a++;                  return () =>{
}                                     return this.a++;
}                                        }
var closure = Person();                          } 
console.log(closure());//10                      }
console.log(closure());//11                       var closure = Person();
                                           console.log(closure()());//10
                                           console.log(closure()());//11

apply & call

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

var adder = {
x: 1,
add1: function (y) {
var fn = v => v + this.x;
return fn(y);
},
add2: function (y) {
var fn = v => v + this.x;
var whatever = {
x: 2
};
return fn.call(whatever, y);//this并不是whatever

} };
console.log(adder.add1(1)); //
console.log(adder.add1(10)); //

ps:this指向的问题js的this比较诡异,谁执行就指向谁

arguments

var fn = (...rest) => rest[2];
console.log(fn(2,0,5)); //
...rest 也是 ES6 的一个新特性,之后会介绍。
我们知道JS函数内部有个arguments对象,可以拿到全部实参。现在ES6给我们带来了一个新的对象,可以拿到除开始参数外的参数,即剩余参数
这个新的对象和arguments不一样,它是程序员自定义的一个普通标识符,只是需要在前面加上三个点:...

es6函数中剩余参数 原文地址:http://www.cnblogs.com/snandy/p/4482463.html

不能被new

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

var Fn = () => {
this.a = 1;
};
var f = new Fn(); // Error

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学习笔记--箭头函数

    基本用法 ES6允许使用“箭头”(=>)定义函数. var f = v => v; 上面的箭头函数等同于: var f = function(v) { return v; }; 如果箭头函 ...

  5. 关于ES6的箭头函数的详解

    ok  坑比函数~~箭头函数~~不自己动手写看懂也不行~~~ 当然你也可以一点一点的把函数复制到Babel里面去将ES6转换成ES5  (斗笔行为) 老谢写的笔记教程就是深入(通俗易懂)哈哈~~~ 第 ...

  6. Es6 之箭头函数 初学

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

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

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

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

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

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

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

随机推荐

  1. Windows下安装Python3.4.2

    一.Windows下安装Python3.4.2 1.下载Windows下的Python3.4.2.exe 2.指定一个目录安装,然后下一步 3.配置环境变量包括Python.exe的文件.目录如下图所 ...

  2. Bostonkey Simple calc

    Simple Calc 明显的memcpy栈溢出,是一个静态链接的程序所以没给libc.发现里面有: 参数a1应该为_libc_stack_end的地址了._stack_prot通过rop修改为0x7 ...

  3. CSS3 布局

    1.1 列布局   CSS3中新出现的多列布局(multi-column)是传统HTML网页中块状布局模式的有力扩充.这种新语法能够让WEB开发人员轻松的让文本呈现多列显示.我们知道,当一行文字太长时 ...

  4. error: undefined reference to `XXX::XXX(type1, ypte2)

    moc_fortunethread.cpp:100: error: undefined reference to `FortuneThread::GetToParentThread(QString, ...

  5. Android设置输入框和软键盘动态悬浮

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  6. 关于C#重写,隐藏的一些事

    第一次开始写技术博客,不知该从何处下手,本人算是菜鸟一枚,每每看到博客园里面的大牛们分享的技术文章,只能望其项背,高不可攀.但细细想来,若不尝试着从小处从低处慢慢去积累分享,想要成为技术大牛也只能沦为 ...

  7. c# 委托内部构造

    以下纯属个人简介,错误之处,请随意指出. 委托是指向方法的,而事件是委托的触发器,执行事件,就会遍历委托里的方法,并且执行. 委托内部构造第一块是方法指针(methodPtr),用于指向方法的内存地址 ...

  8. html5新增结构元素

    1.article元素代表文档.页面或应用程序中独立的.完整的.可以独自被外部引用的内容.除了内容外,一个article元素还有它自己的标题(一般放在header里),有时还有自己的脚注. 2.sec ...

  9. Python学习笔记(二)Python的数据类型和变量

    Python的字符串 Python使用''和""将字符串括起来,与ruby类似,特殊之处是Python可以使用r''表示''内部的字符串默认不转义,如: print(r'\\\t\ ...

  10. yacc和lex在ubuntu上安装

    在编译boa webserver源码的时候./configure的过程中遇到找不到yacc的提示. 采用以下失败: sudo apt-get install yacc lex   应替换为: sudo ...