原文:浅谈 js eval作用域

就简单聊下如何全局 eval 一个代码。

var x = 1;
(function () {
eval('var x = 123;');
})();
console.log(x);

这个代码得到的是 1 而不是 123
如果想让 eval 执行的代码是全局的,那么有几种方法。

var x = 1;
(function () {
window.eval('var x = 123;');
})();
console.log(x);

这个方法标准浏览器都可以得到 123 而IE6-8则依然是 1

相同的例如

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 非常好使。

var x = 1;
(function () {
(!-[1,] ? execScript : eval)('var x = 123;');
})();
console.log(x);

这样基本上就全兼容了。

好了,今天就分享这么个小知识点了。

最新文章

  1. Java集合之HashMap
  2. 相克军_Oracle体系_随堂笔记002-基础
  3. iOS播放器 - AVAudioPlayer
  4. css解决div的各种浏览器兼容性问题
  5. 使用Topshelf快速搭建Windows服务
  6. 【String与基本类型之间的转换】以及【进制转换】
  7. Leetcode 198 House Robber
  8. setTimeout实现动画的黄金优化法则
  9. .Net大文件上传(转--待验证)
  10. 怎么加 一个 hyperlink 到 e-mail template for CRM
  11. Codeforces 13C Sequence
  12. 虚拟键盘,移动web开发的痛
  13. 【Demo 0005】视图控制器
  14. SpringMVCURL请求到Action的映射规则
  15. CSS三种引入方式:内联、页级、外联
  16. Java中private、protected和public作用域的异同
  17. CAS 4.0.x 自定义登录页面
  18. 移除文件(git rm)
  19. C语言感想---第一次作业
  20. 笔记《JavaScript 权威指南》(第6版) 分条知识点概要1—词法结构

热门文章

  1. 红帽/CentOS ext4无法格式化大分区 补充ext4格式化方式
  2. dojo在错误隐藏表行
  3. C该结构变化 struct typedef
  4. 设计模式之前奏(UML类图)
  5. spark未来的发展方向
  6. jQuery -> 获取各种滤芯(filter)
  7. 介绍4种HTML5 Canvas库
  8. 设计模式 Template Method模式 显示程序猿的一天
  9. 创建您自己的Maven模板
  10. [Python]新手写爬虫全过程(转)