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

相关推荐
kyriewen13 小时前
别再对着 TypeScript 报错发呆了:我把 10 个最常见的红色波浪线翻译成了人话
前端·javascript·typescript
free3513 小时前
从 0 实现一个 Tiny JavaScript VM:项目架构拆解
javascript
成都大菠萝13 小时前
Android Car CarProperty 车辆信号链路
android
敲代码的鱼14 小时前
PDF 预览与签名批注写回 支持安卓 iOS 鸿蒙 UTS插件
android·前端·ios
徐小夕15 小时前
我们开源了一款“框架无关”的思维导图编辑器,3分钟集成到任意系统
前端·javascript·github
时光足迹15 小时前
uni-app 视频通话实战:康复师与患者视频问诊的 6 个致命 Bug 与解决方案
android·ios·uni-app
PBitW15 小时前
GPT训练我的第三天,明白了应该咋说满分回答!😕😕😕
前端·javascript·面试
像我这样帅的人丶你还16 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩16 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
labixiong16 小时前
还原一个完整符合规范的 Promise(二)
前端·javascript