亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何阻止我的程序連續兩次輸出相同的內容?

如何阻止我的程序連續兩次輸出相同的內容?

蕪湖不蕪 2023-01-06 11:25:31
因此,我創建了這個包含一些 JavaScript 的 HTML 頁面。我有這個按鈕可以輸出六分之一的表情符號。它工作正常,然后我添加了一些代碼來阻止程序連續兩次輸出相同的表情符號,但它沒有任何區別,我不知道為什么。這是我的代碼:function randEmoji()        {            var oldEmoji = emoji;            var emojiList = [";)", ":D", "xD", ":O", ":X", ":P"];            var emoji = emojiList[Math.floor(Math.random() * emojiList.length)];            if (oldEmoji == emoji)            {                randEmoji();            }            else            {                document.getElementById("emojiText").innerHTML = "Look how fun! ---> " + emoji + " <--- An emoji!";                console.log(emoji);            }        }我不太擅長編程,也不知道是什么導致了這個問題。
查看完整描述

3 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

您必須在函數外部聲明變量并將它們設置在函數內部。否則它們的值在每次函數調用中都會被重置。


嘗試這個:


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;

}


查看完整回答
反對 回復 2023-01-06
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

問題在于函數作用域的任何局部變量(意味著在函數內部聲明)在函數完成執行后都會被丟棄。因此,每次運行該函數emoji并oldEmoji從undefined


一種解決方案是將其中一個聲明移動到父范圍,如下所示:


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();

看這里,我們實際上從來沒有重復過。



查看完整回答
反對 回復 2023-01-06
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

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);

                    

  }


查看完整回答
反對 回復 2023-01-06
  • 3 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號