Mozilla 開發人員網路有以下示例,將值傳遞給next()以及如何捕獲它yield:
function* fibonacci() {
let current = 0;
let next = 1;
while (true) {
let reset = yield current;
[current, next] = [next, next current];
if (reset) {
current = 0;
next = 1;
}
}
}
const sequence = fibonacci();
console.log(sequence.next().value); // 0
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 2
console.log(sequence.next().value); // 3
console.log(sequence.next().value); // 5
console.log(sequence.next().value); // 8
console.log(sequence.next(true).value); // 0
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 2
我很困惑的是這let reset = yield current;條線。我知道這current將接收傳遞給next(). 我不明白的是為什么條件一旦大于1的值if (reset) { /* ... */ }就不會評估為真。current
似乎let reset = yield current;只有在將值傳遞給時才評估該行next(),但我不確定情況是否如此,更不用說為什么會這樣了。MDN 檔案掩蓋了這里實際發生的事情。
進一步的解釋將不勝感激。
編輯:換句話說,let reset = yield current;當一個值沒有被傳入時是什么意思next()?因為current每次回圈運行的價值仍在增加。任務根本就沒有發生嗎?
uj5u.com熱心網友回復:
function* fibonacci() {
let current = 0;
let next = 1;
while (true) {
let reset = yield current;
console.log('reset value', reset);
[current, next] = [next, next current];
if (reset) {
current = 0;
next = 1;
}
}
}
const sequence = fibonacci();
console.log(sequence.next().value); // 0
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 2
console.log(sequence.next().value); // 3
console.log(sequence.next().value); // 5
console.log(sequence.next().value); // 8
console.log(sequence.next(true).value); // 0
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 2
只使用控制臺日志。我們可以看到,當沒有任何內容傳遞給 next() 時,reset 變數獲取 undefined 的值,否則獲取傳遞給 next() 的值。
您可以在 javascript 中將值分配給undefined變數,這就是這里發生的一切。
我不喜歡他們使用這些不相關的代碼示例。在沒有現實生活背景的情況下,很難理解這一點或為什么要使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416965.html
標籤:
上一篇:Tween.js沒有正確鏈接
