ES6新特性之生成器函式 generator

2021-09-23 20:31:31 字數 1660 閱讀 2782

一、什麼是生成器函式?

生成器函式是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

2 false

3 false

4 false //想想為什麼是false?

undefined true

我們做了什麼事:

宣告乙個生成器函式increment(n),每次判斷小於n時自增

每次自增用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在同一作用域下,...