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

相关推荐
Dicky-_-zhang42 分钟前
系统容量规划与压测实战:从1万到100万QPS的科学扩容
java·jvm
2601_958492556 小时前
Optimizing Engagement with Freehead Skate - HTML5 Game - Construct 3
前端·html·html5
Dicky-_-zhang6 小时前
消息队列Kafka/RocketMQ选型与高可用架构:从单体到100万TPS的演进
java·jvm
晨曦中的暮雨6 小时前
4.15腾讯 CSIG云服务产线 一面
java·开发语言
fake_ss1986 小时前
AI时代学习全栈项目开发的新范式
java·人工智能·学习·架构·个人开发·学习方法
茉莉玫瑰花茶6 小时前
工作流的常见模式 [ 1 ]
java·服务器·前端
未若君雅裁7 小时前
Spring AOP、日志切面与声明式事务原理
java·后端·spring
No8g攻城狮7 小时前
【人大金仓】wsl2+ubuntu22.04安装人大金仓数据库V9
java·数据库·spring boot·非关系型数据库
xiaoerbuyu12338 小时前
开源Java 邮箱 基于SpringBoot+Vue前后端分离的电子邮件
java·开发语言