JavaScript箭头函数 和 generator

箭头函数: 用箭头定义函数........
          var fun = x=>x*x
alert(fun(2))            //单参数
 
var fun1 = ()=>2
alert(fun1())        //无参数
 
var fun2 = (x,y)=>x+y
alert(fun2(1,2))        //双参数
 
var fun3 = ()=>({a:12})
alert(fun3().a)          //返回值是对象(要加括号)
 
 
箭头函数有两种格式,一种像上面的,只包含一个表达式,连{ ... }return都省略掉了。还有一种可以包含多条语句,这时候就不能省略{ ... }return
 
 
箭头函数和匿名函数一个明显的区别是this指针。箭头函数中的this指针由上下文决定。
匿名函数实现的错误代码
var obj={
    a:12,
    b:13,
    funn:function()
    {
        var fn = function(){return this.a+this.b};
        return fn();
    }
}
alert(obj.funn());
这样写函数内部的函数this指针指向window或者undefine,当时的解决办法是that = this。现在有箭头函数就不用考虑这些
箭头函数实现的代码
var obj={
    a:12,
    b:13,
    funn:function()
    {
        var fn = ()=>this.a+this.b;
        return fn();
    }
}
alert(obj.funn());//25
 
ps:之前对函数内this指针绑定对象的实现用到了函数的apply和call功能。现在 用call()或者apply()调用箭头函数时,无法对this进行绑定,即传入的第一个参数被忽略。
 
 
 
 
generator : 生成器。
generator由function*定义(注意多出的*号),并且,除了return语句,还可以用yield返回多次。
由generator实现的斐波那契序列
function* fun(max)
{
    var a = 0;
    var b = 1;
    n = 1;
    while(n<=max){
        yield a;
        t = a + b;
        a = b;
        b = t;
        n++;
    }
    return a;
}
for(var i of fun(5))
{
    alert(i)  //0 1 1 2 3
}
 
 
调用generator对象有两个方法,一是不断地调用generator对象的next()方法
                                                 二是直接用for ... of循环迭代generator对象
 
 
generator 作用1: 因为generator可以在执行过程中多次返回,所以它看上去就像一个可以记住执行状态的函数,替代了用对象来保存状态
generator作用2: ,就是把异步回调代码变成“同步”代码
 
 作用3:。。。          
。。。。。
posted @ 2016-10-08 14:57  JasperH  阅读(2720)  评论(0编辑  收藏  举报