3 回答

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
您必須在函數(shù)外部聲明變量并將它們設(shè)置在函數(shù)內(nèi)部。否則它們的值在每次函數(shù)調(diào)用中都會被重置。
嘗試這個(gè):
var oldEmoji = '';
var emoji = '';
var emojiList = [";)", ":D", "xD", ":O", ":X", ":P"];
function randEmoji() {
oldEmoji = emoji;
emoji = emojiList[Math.floor(Math.random() * emojiList.length)];
if (oldEmoji == emoji) {
randEmoji();
} else {
console.log(emoji);
}
}
var i = 0;
while (i < 20) {
randEmoji();
i += 1;
}

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
問題在于函數(shù)作用域的任何局部變量(意味著在函數(shù)內(nèi)部聲明)在函數(shù)完成執(zhí)行后都會被丟棄。因此,每次運(yùn)行該函數(shù)emoji并oldEmoji從undefined
一種解決方案是將其中一個(gè)聲明移動到父范圍,如下所示:
var oldEmoji;
function randEmoji() {
var emojiList = [";)", ":D"];
var emoji = emojiList[Math.floor(Math.random() * emojiList.length)];
if (oldEmoji == emoji) {
randEmoji();
} else {
console.log(emoji);
oldEmoji = emoji;
}
}
randEmoji();
randEmoji();
randEmoji();
randEmoji();
randEmoji();
randEmoji();
randEmoji();
看這里,我們實(shí)際上從來沒有重復(fù)過。

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
var oldEmoji = '';
var emoji = '';
var emojiList = [";)", ":D", "xD", ":O", ":X", ":P"];
function randEmoji(){
// remove old emoji first to avoid doing a recursive call
var check = oldEmoji? emojiList.filter(e => e !== oldEmoji ) : emojiList;
var emoji = check[Math.floor(Math.random() * check.length)];
oldEmoji = emoji
document.getElementById("emojiText").innerHTML = "Look how fun! ---> " + emoji + " <--- An emoji!";
console.log(emoji);
}
添加回答
舉報(bào)