Javascript 我不明白为什么点击链接后;“未定义”;显示的是,而不是传递的参数

Javascript 我不明白为什么点击链接后;“未定义”;显示的是,而不是传递的参数,javascript,Javascript,我不明白为什么点击链接后会显示“未定义”。有人知道为什么吗 让所有块=[“一”,“两”]; 对于(i=0;i

我不明白为什么点击链接后会显示“未定义”。有人知道为什么吗

让所有块=[“一”,“两”];
对于(i=0;iLink

”; } 功能测试(n){ 警报(n);
}
。因为
所有块[i]
未定义。您需要在HTML中呈现
i
的值

让所有块=[“一”,“两”];
对于(i=0;iLink

”; } 功能测试(n){ 警报(n);
}
因为单击处理程序中的代码是

test(allBlocks[i])
您的代码似乎处于全局范围,这是它没有抛出错误的唯一原因。单击时,
i
的值为
allBlocks.length
,该值超出数组的末尾。访问不存在的数组项会导致
未定义

最小的更改是使用字符串连接将
i
的值放入单击处理程序中,而不是
i

document.body.innerHTML += '<p id="" onclick="test(allBlocks[' + i + '])">Link</p>';


旁注:
element.innerHTML+=…
从来都不是个好主意。它强制浏览器遍历
元素
的全部内容,为它包含的DOM结构构建一个HTML字符串,然后将该字符串传递给JavaScript层;然后JavaScript层必须添加到字符串并将其传递回浏览器;然后浏览器必须解析HTML,创建一组新的替换元素,删除
元素
的内容,并用这些新元素替换它。除了大量不必要的工作之外,它还会破坏元素上的任何事件处理程序、任何状态信息等。

因为单击处理程序中的代码是

test(allBlocks[i])
您的代码似乎处于全局范围,这是它没有抛出错误的唯一原因。单击时,
i
的值为
allBlocks.length
,该值超出数组的末尾。访问不存在的数组项会导致
未定义

最小的更改是使用字符串连接将
i
的值放入单击处理程序中,而不是
i

document.body.innerHTML += '<p id="" onclick="test(allBlocks[' + i + '])">Link</p>';


旁注:
element.innerHTML+=…
从来都不是个好主意。它强制浏览器遍历
元素
的全部内容,为它包含的DOM结构构建一个HTML字符串,然后将该字符串传递给JavaScript层;然后JavaScript层必须添加到字符串并将其传递回浏览器;然后浏览器必须解析HTML,创建一组新的替换元素,删除
元素
的内容,并用这些新元素替换它。除了大量不必要的工作之外,它还会破坏元素上的任何事件处理程序、任何状态信息等。

i
充当全局变量。还可以使用模板文本

让所有块=[“一”,“两”];
for(设i=0;i链接

`; } 功能测试(n){ 警报(n);
}
i
充当全局变量。还可以使用模板文本

让所有块=[“一”,“两”];
for(设i=0;i链接

`; } 功能测试(n){ 警报(n);
}
现在它可以工作了!我认为问题在于范围,但我仍在学习:)谢谢!现在它工作了!我认为问题在于范围,但我仍在学习:)谢谢!