html中onclick误区,后续变量会更改怎么办?

【备注】这只是一部分,abcd4个变量都是数组,这段代码后面要用到合起来的数组。

【解决的问题】变量a被改了,弹窗内容会出错!

错误代码(受到变量的影响不安全)

javascript 复制代码
document.querySelector('a').onclick = () => alert('极品\n' + a.join('\n') + '\n高级\n' + b.join('\n') + '\n普通\n' + c.join('\n') + '\n垃圾\n' + d.join('\n'));
a = [...a, ...b, ...c, ...d]

正确代码(内容不变已锁死)

javascript 复制代码
document.querySelector('a').onclick = new Function(`alert(\`极品\n${a.join('\n')}\n高级\n${b.join('\n')}\n普通\n${c.join('\n')}\n垃圾\n${d.join('\n')}\`)`);
a = [...a, ...b, ...c, ...d]

如何将内容锁死,后续无论变量怎么变化,弹窗内容也不会变的?

1:这是源代码要转义。

javascript 复制代码
alert(`极品\n${a.join('\n')}\n高级\n${b.join('\n')}\n普通\n${c.join('\n')}\n垃圾\n${d.join('\n')}`)

2:转义两个地方即可。

javascript 复制代码
alert(\`极品\n${a.join('\n')}\n高级\n${b.join('\n')}\n普通\n${c.join('\n')}\n垃圾\n${d.join('\n')}\`)

3:加上Function将文本转代码。

javascript 复制代码
new Function(`alert(\`极品\n${a.join('\n')}\n高级\n${b.join('\n')}\n普通\n${c.join('\n')}\n垃圾\n${d.join('\n')}\`)`)

4:最后添加上事件即可。

javascript 复制代码
document.querySelector('a').onclick = new Function(`alert(\`极品\n${a.join('\n')}\n高级\n${b.join('\n')}\n普通\n${c.join('\n')}\n垃圾\n${d.join('\n')}\`)`)

为什么要写死代码?

让弹窗显示的内容不受变量影响!
这是一个小细节哦~出了错误我找了好久,后来才发现这个错误。
onclick点击事件中用到的变量是实时获取的,不是不变的。
当时我还在问:设置了内容为什么它显示的不对?后来才知道是变量后续被修改了。

相关推荐
Tisfy5 分钟前
LeetCode 1927.求和游戏:抵消+看最值
java·leetcode·游戏·题解·博弈论
小成很成5 小时前
mysql 8.0.21 升级 mysql 8.0.45(经过生产环境验证)
android·mysql·adb
秋饼7 小时前
JDK 27 企业级 AI 服务落地实战:G1 默认、紧凑对象头、后量子 TLS 与 JFR 脱敏全解析
java·ai·技术分享·后端开发
Csvn7 小时前
原型链、this 与闭包内存:三座深水区一次打通(含内存泄漏排查实战)
前端·javascript
卓怡学长7 小时前
w176基于SpringBoot的医院管理系统
java·spring boot·spring·maven·intellij-idea
lemon_sjdk7 小时前
ObjectProperty
java·开发语言·算法
hh9507 小时前
Agent Plan x DeepSeek Harness:Agent 供应链安全与第三方插件审计
java·开发语言·安全·agent plan·adg成都社区·adg社区
吴声子夜歌7 小时前
Java面试——HBase原理及应用
java·面试·hbase
万维易源7 小时前
趣味项目素材|免费脑筋急转弯查询接口实战接入教程
javascript·免费api·脑筋急转弯查询·脑筋急转弯接口