普通函式和生成器函式之間最大的區別,普通函式不能自暫停,生成器函式可以。
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 多次,...