2
我知道yield*
可以用來組成generator
,這樣使用V8 JavaScript,普通函數可能產生一個值嗎?
function* foo() {
yield* bar();
yield 1;
}
function* bar() {
yield 2;
}
但是,如果我有一些正常功能yield
的值。
function xx()
{
yield 1;
}
V8說
yield 1;
^
SyntaxError: Unexpected number`
這是否意味着yield
只節省了generator
的環境,而不是完整的調用堆棧,有沒有辦法停止和恢復像發電機正常的功能?
我聽說在FireFox(SpiderMonkey)中,yield
可以用於與ES6不兼容的正常功能。
謝謝安德烈亞斯。我接受你的答案。我想知道爲什麼ES6不接受更強大的'SpiderMonkey yield'。甚至更加強大的「計劃」中的第一類延續。我們可以基於'continuation'或'SpiderMonkey yield'輕鬆構建'V8 yield'。但反過來很難做到這一點。 – wcy
因爲我們發現最好能夠在代碼中直接明確函數和生成器之間的區別,而不必搜索整個身體發生「yield」。他們真是完全不同的野獸,稱它們具有完全不同的含義。全面的繼續OTOH被委員會一致拒絕,因爲它們強大並且破壞網絡上現有代碼可能承擔的各種不變量,因此存在安全風險等問題。 –
另請注意,SpiderMonkey的良率不會更強大,它只是更微妙的語法。 –