## 1.generator基礎
generator函數最大的特點是交出函數的執行權。
~~~
function *gen(x){
yiled x+2;
return x;
}
~~~
>它不同于普通函數,是可以暫停執行的,所以函數名之前要加星號,以示區別
~~~
var g = gen(1);
g.next() // { value: 3, done: false }
g.next() // { value: undefined, done: true }
~~~
- 調用generator函數不會立即執行,而是會返回一個遍歷器g
- g 的 next 方法,會移動內部指針(即執行異步任務的第一段),指向第一個遇到的 yield 語句,上例是執行到 x + 2 為止
- next 方法的作用是分階段執行 Generator 函數。每次調用 next 方法,會返回一個對象
- 回一個對象,表示當前階段的信息( value 屬性和 done 屬性)
- value 屬性是 yield 語句后面表達式的值,表示當前階段的值;done 屬性是一個布爾值,表示 Generator 函數是否執行完畢,即是否還有下一個階段
## 2. Generator 函數的數據交換和錯誤處理
函數體內外的數據交換和錯誤處理機制。
### 2.1函數體內外的數據交換
~~~
function* gen(x){
var y = yield x + 2;
return y;
}
var g = gen(1);
g.next() // { value: 3, done: false }
g.next(2) // { value: 2, done: true }
~~~
- next 方法返回值的 value 屬性,是 Generator 函數向外輸出數據;next 方法還可以接受參數,這是向 Generator 函數體內輸入數據。
- 第一個 next 方法的 value 屬性,返回表達式 x + 2 的值(3)
- 第二個 next 方法帶有參數2,這個參數可以傳入 Generator 函數,作為上個階段異步任務的返回結果,被函數體內的變量 y 接收。因此,這一步的 value 屬性,返回的就是2(變量 y 的值)。
### 2.2錯誤處理
~~~
function* gen(x){
try {
var y = yield x + 2;
} catch (e){
console.log(e);
}
return y;
}
var g = gen(1);
g.next();
g.throw('出錯了');
// 出錯
~~~
~~~
function *gen(x){
var y = yield 10+x;
yield x+y
}
var g = gen(1);
console.log(g.next())
console.log(g.next(40))
~~~
- 將es6轉為es5
- 第一節 webpack
- 第二章 基礎語法
- 第1節 模塊化
- 第2節set和map語法
- 2.1 set
- 第3節 變量
- 第4節 循環of
- 第5節 function
- 第6節 解構賦值
- 1.在對象在函數中的解構
- 第7節 字符串
- 第8節 面向對象
- 8-1 static靜態屬性,靜態方法
- 第9節 JSON對象
- 9-1 Object.keys()
- 第10節 Promise
- 10.1 原理
- 10.2 回調地獄
- 第11節 generator
- 第一節 基本
- 第二節 generator-ajax
- 第12節 yield
- 第13節 asnyc
- 13.1
- 13.2 ajax
- 第14節 array
- 第15節 string方法拓展
- 第三章 webpack的簡單配置
- 第四章 高級語法
- 第1節 promise
- a.實例
- b.promise
- 第2節 await,async