JavaScript中未声明变量为何无报错?表单验证实例问询
为什么未声明的
nameError变量能直接使用且不报错? 这是因为浏览器会自动将页面中带有id属性的元素挂载到全局window对象上,变量名就是元素的id值。
看你提供的代码片段:
if(name == "") { // why it works although I didn't // declared nameError nameError.innerHTML = "Name is required"; }
对应的HTML里肯定存在一个id="nameError"的<div>元素(比如<div id="nameError"></div>)。浏览器加载页面时,会自动把这个元素作为window.nameError存在,所以你直接写nameError时,其实是在访问全局的window.nameError,相当于已经隐式声明了这个变量,自然不会触发未声明变量的报错。
不过这种行为属于浏览器的历史遗留特性,不推荐依赖它:
- 容易和自定义变量产生命名冲突
- 代码可读性差,其他开发者可能困惑变量的来源
- 在严格模式(
"use strict")下,这种隐式全局变量的访问会被限制,可能触发报错
建议还是通过document.getElementById('nameError')来显式获取元素,代码更清晰可靠。
内容的提问来源于stack exchange,提问作者Ihtisham Khan
相关产品推荐
相关产品推荐

