箭頭函數: 用箭頭定義函數........
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:。。。
。。。。。