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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM