JavaScript:错误 - 变量已经定义?为什么?

标签 javascript

我正在使用很棒的 JSLint 工具来确保我的 JavaScript 是“严格的”。

但是,当我使用它时,出现以下错误:

'hexRed', 'hexGreen', 'hexBlue', 'color' are already defined (referring to the "else if" clause)

我的代码如下。有什么想法可以修复我的代码以使其 JavaScript 变得“严格”吗?

function fade(currentStep, numSteps, currentRed, currentGreen, currentBlue, deltaRed, deltaGreen, deltaBlue) {

    if (currentStep < numSteps) {
        var hexRed   = zeroPad(currentRed.toString(16), 2);
        var hexGreen = zeroPad(currentGreen.toString(16), 2);
        var hexBlue  = zeroPad(currentBlue.toString(16), 2);
        var color = "#" + hexRed + hexGreen + hexBlue;

        document.getElementById('abc').style.backgroundColor = color;

        currentRed   += deltaRed;
        currentGreen += deltaGreen;
        currentBlue  += deltaBlue;

        timerID = setTimeout("fade(currentStep, numSteps, currentRed, currentGreen, currentBlue, deltaRed, deltaGreen, deltaBlue)", 70); 

    } else if (currentStep == numSteps) { 

        var hexRed   = endingRed.toString(16);  // <-- JSLint flags this line
        var hexGreen = endingGreen.toString(16);  // <-- JSLint flags this line
        var hexBlue  = endingBlue.toString(16);  // <-- JSLint flags this line
        var color = "#" + hexRed + hexGreen + hexBlue;  // <-- JSLint flags this line

        document.getElementById('abc').style.background = color;
    }
}

最佳答案

JavaScript 将变量范围限定在它们所在的函数内,而不是在 { 和 } 之间的 block 内。

例如:

function test(){
   var i=0;
   if (i > 5) {
      var x = i + 1;
      alert(x);
   }
}

实际意思是:

function test(){
   var i, x;
   i = 0;
   if (i > 5) {
      x = i + 1;
      alert(x);
   }
}

您可以将 is 视为实际上是在函数顶部使用“var”创建的所有变量,但初始化为您首先为其分配的值。

要解决您的问题,只需通过在函数顶部声明变量来明确这一点,就像我在上面的第二个代码片段中所做的那样。

关于JavaScript:错误 - 变量已经定义?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4166219/

相关文章:

javascript - 预加载 JavaScript

javascript - 如何使所有选择的元素加宽 15px?

javascript - 使用 jQuery 删除具有相同类名的多个表

javascript - 如何从文本区域值中获取对象

javascript - 色方算法

javascript - d3.js 图中的搜索功能

javascript - 计算div的高度和宽度并将其与窗口高度和宽度相关联

javascript - 显示覆盖全屏 div,然后通过单击将其隐藏

javascript - Canvas 旋转、toDataUrl,然后裁剪会破坏图像质量

javascript - jQuery 上传文件不适用于 ajax