为了账号安全,请及时绑定邮箱和手机立即绑定

如何阻止我的程序连续两次输出相同的内容?

如何阻止我的程序连续两次输出相同的内容?

芜湖不芜 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贡献1626条经验 获得超6个赞

您必须在函数外部声明变量并将它们设置在函数内部。否则它们的值在每次函数调用中都会被重置。


尝试这个:


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贡献1606条经验 获得超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贡献1780条经验 获得超2个赞

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 关注
  • 11 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信