"分配给未声明的变量"使用" for(i = 0; ..)"

时间:2014-04-03 22:46:23

标签: javascript

嘿我试图获取HTML表单中所有输入字段的列表,但是我收到了以下错误(在Firebug中):

ReferenceError: assignment to undeclared variable i
for (i=0 ; i<inputs.length; i++)

我不明白&#34;我&#34;未申报,因为这是&#34; for&#34;的第一部分确实。 这是我的公式

 function listinputs() 
    {
       var form = document.getElementById("wholeform");
       var inputs = form.childNodes;
       for (i=0 ; i<inputs.length; i++)
       {
          var string=string + inputs[i].nodeName + "<br>";
          var here = document.getElementsByTagName("p");
          here.innerHTML(string);
       }
}

3 个答案:

答案 0 :(得分:19)

for (var i=0; i<inputs.length; i++)

您需要使用var

声明它

正如T.J在他的回答中所说,由于你使用的是严格模式,因此不会产生隐含的全局。这就是抛出错误的原因。

答案 1 :(得分:14)

它没有说i 未分配,它说未声明。代码从不声明i变量,但随后尝试为其赋值(在for循环的初始化部分中)。显然你正在使用严格模式(好!),因此引擎会给你一个错误,而不是创建一个implicit global

在函数中使用i声明var,例如:

function listinputs() 
{
    var form = document.getElementById("wholeform");
    var inputs = form.childNodes;
    var i; // <=================================== Here
    for (i=0 ; i<inputs.length; i++)
    {
        string=string + inputs[i].nodeName + "<br>";
        here = document.getElementsByTagName("p");
        here.innerHTML(string);
    }
}

附注:在ES6中,当它到达时,如果需要,您只能使用let和范围ifor语句。但是现在,请使用var

答案 2 :(得分:0)

错误消息

  

ReferenceError:赋值给未声明的变量“x”(Firefox)
  ReferenceError:未定义“x”(Chrome)
ReferenceError:   严格模式下的变量未定义(边缘)

无效案例
在这种情况下,变量“ bar ”是未声明的变量。

function foo() { 
  'use strict'; 
  bar = true; 
} 
foo(); // ReferenceError: assignment to undeclared variable bar

有效案例
要使“ bar ”成为声明的变量,您可以在其前面添加var关键字。

function foo() {
  'use strict';
  var bar = true;
}
foo();