生成器(Generators)簡介

2022-09-19 03:36:09 字數 1403 閱讀 1052

普通函式和生成器函式之間最大的區別,普通函式不能自暫停,生成器函式可以。

function* quips(name) 

yield " 我們下次再見!";

}

呼叫乙個生成器函式並不會馬上執行它裡面的語句,而是返回乙個這個生成器的迭代器 ( iterator )物件。

> var iter = quips("jorendorff");

[object generator]

> iter.next()

> iter.next()

> iter.next()

> iter.next()

next() 方法返回乙個包含屬性 done 和 value 的物件。

該方法也可以通過接受乙個引數用以向生成器傳值。

function* gen() 

}var g = gen();

g.next(1);

// ""

g.next(2);

// 2

// ""

返回乙個generator

function* g1() 

function* g2()

var iterator = g2();

console.log(iterator.next()); //

console.log(iterator.next()); //

console.log(iterator.next()); //

console.log(iterator.next()); //

console.log(iterator.next()); //

console.log(iterator.next()); //

throw() 方法用來向生成器丟擲異常,並恢復生成器的執行,返回帶有 done 及 value 兩個屬性的物件。

var g = function* ()  catch (e) 

};var i = g();

try

i.next(); //

i.throw('a');

i.next(); //

i.throw('b');

i.throw('c');

} catch (e)

return() 方法返回給定的值並結束生成器。

unction* gen() 

var g = gen();

g.next(); //

g.return("foo"); //

g.next(); //

Python生成器generators與yield

在python中,建立生成器generator的方法之一就是在函式中使用yield關鍵字,原本的函式就變成了乙個generator。換句話說,如果乙個函式至少包含乙個yield宣告 當然它也可以包含其他yield或return 那麼它就是乙個generator。理解generator的三個要點 下面...

PHP 生成器Generators的入門理解和學習

什麼是生成器generators 生成器允許你在 foreach 塊中寫 來迭代一組資料而不需要在記憶體中建立乙個陣列,那會使你的記憶體達到上限,或者會佔據可觀的處理時間。相反,你可以寫乙個生成器函式,就像乙個普通的自定義函式一樣,和普通函式只返回一次不同的是,生成器可以根據需要 yield 多次,...

PHP 生成器Generators的入門理解和學習

什麼是生成器generators 生成器允許你在 foreach 塊中寫 來迭代一組資料而不需要在記憶體中建立乙個陣列,那會使你的記憶體達到上限,或者會佔據可觀的處理時間。相反,你可以寫乙個生成器函式,就像乙個普通的自定義函式一樣,和普通函式只返回一次不同的是,生成器可以根據需要 yield 多次,...