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点击事件中用到的变量是实时获取的,不是不变的。
当时我还在问:设置了内容为什么它显示的不对?后来才知道是变量后续被修改了。

相关推荐
R-sz3 分钟前
UE5.4 打包报错 error C4668 C4067
java·前端·ue5
zhengxianyi5154 分钟前
ruo-vue-pro 启用任务调度模块并新增一个job
java·vue.js·spring boot
Nuopiane5 分钟前
Pal3.Unity开源项目复刻(八)其余
java·服务器·前端
计算机徐师兄14 分钟前
Java基于微信小程序的社区垃圾回收管理系统【附源码、文档说明】
java·微信小程序·社区垃圾回收管理系统·社区垃圾回收管理系统小程序·社区垃圾回收管理微信小程序·社区垃圾回收管理小程序·jav社区垃圾回收管理小程序
zhouping@16 分钟前
Java学习笔记day04
java·笔记·学习
用户693717500138416 分钟前
Android R8 深度解析:为什么 Google 用R8取代 ProGuard?
android·android studio·android jetpack
waper9717 分钟前
java项目部署上线,安全扫描问题的解决方案
java·安全·nacos·docker compose
怒放de生命201024 分钟前
IDEA 2025 最新版jrebel 破解
java·ide·intellij-idea
seabirdssss33 分钟前
联想拯救者Y7000P上使用ADB无法监听到通过USB连接的安卓设备
android·adb
全栈老石37 分钟前
再见 Moment.js!浏览器原生支持的新一代时间库 Temporal 来了
前端·javascript