javascript - 将 javascript 变量与 html ID 同名是不好的做法吗?
问题描述
这是我的代码:
var p1Display = document.querySelector("#p1Display");
我想知道如果我只是使用变量来获取相同的 ID,那么让 ID 和变量同名是否是不好的做法?
解决方案
如果同一页面上有其他脚本使用不良做法并且还依赖于引用该元素的全局变量,并且您将不同的元素分配给该变量,则可能会导致问题。这是因为 ID (不幸地)分配给了window
:
// This doesn't throw a ReferenceError because window.mydiv exists:
console.log(mydiv);
<div id="mydiv">
</div>
举一个问题的例子:
<div id="mydiv">text content!</div>
<script>
// One script written by someone else (not you):
setTimeout(() => {
console.log('Expecting text content to be `text content!`');
console.log(mydiv.textContent);
console.log('Oops...');
}, 1000);
</script>
<script>
// Your script, which assigns something *other* than `#mydiv` to the variable named `mydiv` in global scope:
const mydiv = document.createElement('div');
mydiv.textContent = 'Another div';
document.body.appendChild(mydiv);
</script>
解决方案是:
(1) 不要在顶层定义变量,因为这会干扰其他脚本的变量名 - 改用 IIFE
(2) 不要依赖隐式引用 上的属性window
,这会导致语义混乱和代码难以阅读
推荐阅读
- angular - Angular 9 Reactive Form - 删除最后一个控件并在表单上有效
- javascript - Discord.js 播放声音离开并在 x 次后加入并执行相同操作
- python - 使用 os.path.exists 和 assert 检查除了定义的列表之外是否存在其他文件夹
- javascript - 如何倒计时?| X天,X小时过去了
- c# - 字符串中可空枚举的扩展方法
- apache-flink - Kinesis Data Analytics Flink:不断增加的检查点大小
- reactjs - 上下文中的 useState 挂钩重置未聚焦的输入框
- python - 使用 %s 的 MySQL 连接器/python 困难
- kubernetes - 如何将 Kubernetes 注释写入底层 YAML 文件?
- ms-access - 无法将 Access DB 导入 SQL Server Migration Assistant for Access(32 位)