掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
JavaScript的Generator函數(shù)

創(chuàng)新互聯(lián)專注于磴口網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供磴口營銷型網(wǎng)站建設(shè),磴口網(wǎng)站制作、磴口網(wǎng)頁設(shè)計、磴口網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造磴口網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供磴口網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
Generator函數(shù)是一種特殊的函數(shù),它可以暫停和恢復(fù)執(zhí)行,在執(zhí)行過程中,它可以通過yield關(guān)鍵字返回一個值,但不會終止函數(shù)的執(zhí)行,當(dāng)再次調(diào)用next()方法時,函數(shù)會從上次暫停的地方繼續(xù)執(zhí)行。
1、使用function*關(guān)鍵字定義
2、內(nèi)部可以使用yield關(guān)鍵字暫停和恢復(fù)執(zhí)行
3、每次調(diào)用next()方法,函數(shù)會從上次暫停的地方繼續(xù)執(zhí)行
4、可以與for…of循環(huán)結(jié)合使用,實現(xiàn)異步編程
function* countUpTo(max) {
let count = 1;
while (count <= max) {
yield count;
count++;
}
}
const generator = countUpTo(5);
console.log(generator.next().value); // 輸出:1
console.log(generator.next().value); // 輸出:2
console.log(generator.next().value); // 輸出:3
console.log(generator.next().value); // 輸出:4
console.log(generator.next().value); // 輸出:5
問題1:如何使用Generator函數(shù)實現(xiàn)一個簡單的計數(shù)器?
解答:可以使用yield關(guān)鍵字暫停和恢復(fù)執(zhí)行,每次調(diào)用next()方法,函數(shù)會從上次暫停的地方繼續(xù)執(zhí)行。
function* counter() {
let count = 0;
while (true) {
count++;
yield count;
}
}
問題2:如何使用Generator函數(shù)實現(xiàn)一個簡單的延遲器?
解答:可以使用setTimeout()函數(shù)模擬延遲,結(jié)合yield關(guān)鍵字實現(xiàn)延遲器。
function* delay(ms) {
yield new Promise((resolve) => setTimeout(resolve, ms));
}

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流