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

相关推荐
To_OC4 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
腻害兔4 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
小林ixn5 小时前
从零到一理解 React 父子组件通信:手写一个 Todo 应用带你彻底搞懂单向数据流
前端·javascript·react.js
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
窝子面8 小时前
手搓最简前后端协作-node
javascript·数据库
kyriewen9 小时前
我让AI给前端项目做了一次完整的Code Review——它和人类的差距,比我想的大得多
前端·javascript·ai编程
维天说9 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
এ慕ོ冬℘゜9 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript