Javascript 如何阻止程序连续两次输出相同的内容?
因此,我创建了这个HTML页面,其中包含一些JavaScript。我有一个按钮,输出六个表情中的一个。它工作得很好,然后我添加了一些代码来阻止程序连续两次输出相同的表情符号,但这没有任何区别,我也不知道为什么。Javascript 如何阻止程序连续两次输出相同的内容?,javascript,debugging,Javascript,Debugging,因此,我创建了这个HTML页面,其中包含一些JavaScript。我有一个按钮,输出六个表情中的一个。它工作得很好,然后我添加了一些代码来阻止程序连续两次输出相同的表情符号,但这没有任何区别,我也不知道为什么。 这是我的代码: function randEmoji() { var oldEmoji = emoji; var emojiList = [";)", ":D", "xD&
这是我的代码:
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);
}
}
函数randEmoji()
{
var oldEmoji=表情符号;
变量emojiList=[“;)”,“:D”,“xD”,“:O”,“:X”,“:P”];
var emoji=emojiList[Math.floor(Math.random()*emojiList.length)];
if(oldEmoji==表情符号)
{
randEmoji();
}
其他的
{
document.getElementById(“emojiText”).innerHTML=“看多有趣!-->“+emoji+”您必须在函数外部声明变量并在内部设置它们。否则,它们的值会在每次函数调用中重置 试试这个:
var oldEmoji='';
var emoji='';
变量emojiList=[“;)”,“:D”,“xD”,“:O”,“:X”,“:P”];
函数randEmoji(){
oldEmoji=表情符号;
emoji=emojiList[Math.floor(Math.random()*emojiList.length)];
if(oldEmoji==表情符号){
randEmoji();
}否则{
console.log(emoji);
}
}
var i=0;
而(i<20){
randEmoji();
i+=1;
}
您必须在函数外部声明变量并在内部设置它们。否则,它们的值在每次函数调用中都会重置
试试这个:
var oldEmoji='';
var emoji='';
变量emojiList=[“;)”,“:D”,“xD”,“:O”,“:X”,“:P”];
函数randEmoji(){
oldEmoji=表情符号;
emoji=emojiList[Math.floor(Math.random()*emojiList.length)];
if(oldEmoji==表情符号){
randEmoji();
}否则{
console.log(emoji);
}
}
var i=0;
而(i<20){
randEmoji();
i+=1;
}
问题在于,函数完成执行后,函数作用域的任何局部变量(即函数内部声明的变量)都会被丢弃。因此,每次运行函数emoji
和oldEmoji
时,都会从未定义的
一种解决方案是将其中一个声明移动到父范围,如下所示:
var-oldEmoji;
函数randEmoji(){
变量emojiList=[“;)”,“:D”];
var emoji=emojiList[Math.floor(Math.random()*emojiList.length)];
if(oldEmoji==表情符号){
randEmoji();
}否则{
console.log(emoji);
oldEmoji=表情符号;
}
}
randEmoji();
randEmoji();
randEmoji();
randEmoji();
randEmoji();
randEmoji();
randEmoji();
问题在于,函数完成执行后,函数作用域的任何局部变量(即函数内部声明的变量)都会被丢弃。因此,每次运行函数emoji
和oldEmoji
时,都会从未定义的
一种解决方案是将其中一个声明移动到父范围,如下所示:
var-oldEmoji;
函数randEmoji(){
变量emojiList=[“;)”,“:D”];
var emoji=emojiList[Math.floor(Math.random()*emojiList.length)];
if(oldEmoji==表情符号){
randEmoji();
}否则{
console.log(emoji);
oldEmoji=表情符号;
}
}
randEmoji();
randEmoji();
randEmoji();
randEmoji();
randEmoji();
randEmoji();
randEmoji();
除了@full stack answer,您还可以:
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);
}
var oldEmoji='';
var emoji='';
变量emojiList=[“;)”,“:D”,“xD”,“:O”,“:X”,“:P”];
函数randEmoji(){
//首先删除旧的表情符号,以避免执行递归调用
var check=oldEmoji?emojiList.filter(e=>e!==oldEmoji):emojiList;
var emoji=check[Math.floor(Math.random()*check.length)];
表情符号
document.getElementById(“emojiText”).innerHTML=“看多有趣!-->“+emoji+”除了@full-stack-answer之外,您还可以:
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);
}
var oldEmoji='';
var emoji='';
变量emojiList=[“;)”,“:D”,“xD”,“:O”,“:X”,“:P”];
函数randEmoji(){
//首先删除旧的表情符号,以避免执行递归调用
var check=oldEmoji?emojiList.filter(e=>e!==oldEmoji):emojiList;
var emoji=check[Math.floor(Math.random()*check.length)];
表情符号
document.getElementById(“emojiText”).innerHTML=“看多有趣!-->”+emoji+“您必须在函数外部声明变量,并在函数内部进行设置。否则,它们的值会在每个函数callRead中重置。您尚未回答或将以下任何问题标记为正确?如果您不知道如何回答,请选择解决问题的最佳答案,然后选择灰色勾号✓
因此变为绿色。这样,这意味着问题已由该特定答案解决。您必须在函数外部声明变量并在内部设置它们。否则,它们的值将在每个函数callRead中重置。您尚未回答或将以下任何问题标记为正确?如果您不知道如何回答,请选择解决问题的最佳答案,然后选择灰色勾号✓代码>所以它变为绿色。这样,就意味着这个问题已经被那个特定的答案解决了。