Javascript Mozilla文档中的setInterval()示例不在JSFIDLE中工作

Javascript Mozilla文档中的setInterval()示例不在JSFIDLE中工作,javascript,Javascript,我复制了Mozilla文档中关于setInterval()的示例#2,但在我的JSFIDLE中,文本的颜色不会在红色和蓝色之间交替: 演示: 这不可能是因为我需要jQuery或者是因为标记,对吧?我把它抄了一遍 我还想问一下澄清的目的:var nIntervId的原因;在顶部定义为全局变量,以便它可以在changeColor()和stopTextColor()函数中使用,对吗 var nIntervId; //global variable function changeColor() {

我复制了Mozilla文档中关于setInterval()的示例#2,但在我的JSFIDLE中,文本的颜色不会在红色和蓝色之间交替:

演示:

这不可能是因为我需要jQuery或者是因为标记,对吧?我把它抄了一遍

我还想问一下澄清的目的:var nIntervId的原因;在顶部定义为全局变量,以便它可以在changeColor()和stopTextColor()函数中使用,对吗

var nIntervId; //global variable

function changeColor() {
  nIntervId = setInterval(flashText, 500);
 }

function flashText() {
  var oElem = document.getElementById("my_box");
  oElem.style.color = oElem.style.color == "red" ? "blue" : "red";
}

function stopTextColor() {
  clearInterval(nIntervId);
}
换句话说,如果代码如下所示:

function changeColor() {
  var nIntervId = setInterval(flashText, 500);
}

function flashText() {
  var oElem = document.getElementById("my_box");
  oElem.style.color = oElem.style.color == "red" ? "blue" : "red";
}

function stopTextColor() {
  clearInterval(nIntervId); //undefined??
}

您的函数是在另一个函数中定义的(该函数是在
onLoad
中执行的)(根据左侧JSFIDLE选项中的第二个下拉菜单)

这意味着它们的作用域是该函数,而不是全局函数

因此,它们超出了
onload=“stopTextColor();”
属性的范围


只需在现有的onload处理程序中调用
stopTextColor()
,而不是在使用
onload
属性创建的另一个处理程序中调用即可。

您的小提琴工作正常。只需将左侧的第二个下拉菜单(显示onLoad更改为No Wrap-in-Head选项)


您还应该查看链接,了解为什么

昆汀回答了为什么您的代码不起作用,所以我将回答您的第二个问题;关于
nItervId
是gloabl变量的原因,您是正确的。它用于
clearInterval()
-方法。