浅谈 js eval作用域
就简单聊下如何全局 eval 一个代码。
1 2 3 4 5 | var x = 1; ( function () { eval( 'var x = 123;' ); })(); console.log(x); |
这个代码得到的是 1 而不是 123
如果想让 eval 执行的代码是全局的,那么有几种方法。
1 2 3 4 5 | var x = 1; ( function () { window.eval( 'var x = 123;' ); })(); console.log(x); |
这个方法标准浏览器都可以得到 123 而IE6-8则依然是 1
相同的例如
1 2 3 4 5 6 7 8 9 10 | var arr = [0,0,0,0,0,0]; ( function () { var arr = [1,1,1,1,1,1]; var _eval = eval; window.eval( 'arr[0] = 123;' ); eval.call( null , 'arr[1] = 123;' ); _eval( 'arr[2] = 123;' ); (0,eval)( 'arr[3] = 123;' ); })(); console.log(arr); |
0,1 貌似不支持IE8- 2,3 貌似不支持 IE7-
反正归根结底就是兼容性有问题。
不过好在IE下有个 execScript 非常好使。
1 2 3 4 5 | var x = 1; ( function () { (!-[1,] ? execScript : eval)( 'var x = 123;' ); })(); console.log(x); |
这样基本上就全兼容了。
好了,今天就分享这么个小知识点了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述