嘿我试图获取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);
}
}
答案 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
和范围i
到for
语句。但是现在,请使用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();