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:。。。
。。。。。