一、什麼是生成器函式?
生成器函式是es6的新特性之一,它是乙個在執行時能中途暫時退出,後面重新呼叫又能重新進入繼續執行的一種函式。
並且在函式內定義的變數的所有狀態不受中途退出的影響。
二、語法
宣告方式:
function* 函式名([引數1[, 引數2[, … 引數n]]])
呼叫說明:
1) 呼叫生成器物件時會返回乙個生成器的迭代器
2) 該迭代器中有乙個next()方法,它返回乙個包含value和done的物件
3) 每次呼叫next()方法遇到yied表示式位置暫停執行
4) value表示yied表示式的返回值,done表示該生成器最後乙個值是否已經產生
5)如果給next()方法傳遞引數, 引數的值會代替yied表示式的返回值
6) 如果在生成器中呼叫return,生成器將提前完成
三、示例
1、定義乙個自增生成器函式,每次next()呼叫返回自增的值
輸出如下:
1 false宣告乙個生成器函式increment(n),每次判斷小於n時自增2 false
3 false
4 false //想想為什麼是false?
undefined true
我們做了什麼事:
每次自增用yield表示式,返回表示式的值,然後自增(因為是字尾++)
function* increment(n)
直接使用it.next()
for(let i = 0; i<5; i++)
//輸出為:1, false, 3, false, undefined, true, undefined, true, undefined, true
2、給next()傳遞引數
function* increment()
var it = increment();
it.next();
it.next(3);
it.next(9);
輸出為:3,9
3、顯式返回
function* increment()
var it = increment();
console.log(it.next().value);
console.log(it.next().value);
console.log(it.next().value);
四、補充
yield*
語法:yield* [[表示式]]
說明:yield* expression 用於委託給另乙個generator或可迭代物件。
栗子:function* increment_slowly()
function* increment()
var it = increment();
console.log(it.next().value); // >1
console.log(it.next().value); // >1.2
console.log(it.next().value); // >1.31
console.log(it.next().value); // >2
ES6之生成器(Generator)
目錄 深入理解 新語法 yield 生成器與協程 通過一段程式,持續迭代或列舉出符合某個公式或演算法的有序數列中的元素。function fibo let generator fibo for let i 0 i 10 i 生成器函式和普通函式的語法差別在於,在 function 語句之後和函式名之...
JS之ES6生成器
generator 生成器 是 es6 標準引入的新的資料型別。乙個 generator 看上去像乙個函式,但可以返回多次。generator 函式和普通的函式區別有兩個,1 function 和函式名之間有乙個 號,2 函式體內部使用了 yield 表示式 呼叫生成器函式和呼叫 普通函式不同,呼叫...
es6新特性 ES6新特性(一)
var 1 var宣告的是函式作用域 區域性 但在if for等定義的變數是全域性的 2 var 具有變數提公升,預解析 3 在同乙個作用域下,var可以宣告多次 4 var 宣告的變數會掛載到window上 let1 let不存在變數提公升,在變數使用之前,必須要先宣告 2 let在同一作用域下,...