--操作员无法使用javascript

--操作员无法使用javascript,javascript,decrement,Javascript,Decrement,大家好,我正在尝试使用setInterval函数我的代码是: var int = setInterval(function() { var x = 0; x--; document.body.innerHTML = x; }, 30); 但这只是打印-1——没什么了,为什么会这样?有人能告诉我吗?因为你在函数中声明变量,函数每30毫秒调用一次(这是setInterval的性质),它将创建一个新变量x并为其赋值0,然后从中减去1。因此,每次将为-1。要解决此问题,您可以执

大家好,我正在尝试使用setInterval函数我的代码是:

var int = setInterval(function() {
    var x = 0;
    x--;
    document.body.innerHTML = x;
}, 30);

但这只是打印-1——没什么了,为什么会这样?有人能告诉我吗?

因为你在函数中声明变量,函数每30毫秒调用一次(这是setInterval的性质),它将创建一个新变量x并为其赋值0,然后从中减去1。因此,每次将为-1。要解决此问题,您可以执行以下操作:

var x = 0;
var int = setInterval(function() {
  x--;
  document.body.innerHTML = x;
}, 30);

尽管是公平警告:这将导致无限循环

,因为每次运行时都将变量设置为0,然后减去1。你总是会得到-1你期望它做什么?为什么?您需要将变量声明移出函数。
var x=0
将每次重置
x
的值。尝试在
setInterval
调用之外声明
x
,例如:
var x=0;var int=setInterval(…)
尽管有公平的警告:这将导致无限循环
不完全是这样,因为它实际上不是一个循环-它将安排代码无限次地运行。这听起来像tomayto-tomahto,但这是一个重要的区别,一个无限循环表明程序将被困在那里,并且通常表示一个问题。相比之下,
setInterval
不会阻止其他代码运行。此外,它可以通过从应用程序的任何部分执行
clearInterval(int)
来终止,而不是在循环结构中仅具有
break
return
选项。