eval与window.eval的差别分析


Posted in Javascript onMarch 17, 2011

它们之间有区别吗?

开发过程中似乎很少有人去加个额外的window,觉得多此一举。比如Ajax过程中回调函数解析JSON格式字符串

... 
function callback(str){ 
var json = eval('(' + str + ')'); 
} 
...

通常直接使用eval,而非var json = window.eval('(' + str + ')');
又比如调试时使用alert,很少有人使用window.alert;IE中获取事件对象使用event,很少有人使用window.event。(Firefox中在某些情况下也支持event而不支持window.event。感兴趣的同学看看这篇 获取事件对象的全家)

但由于各个引擎实现差异,它们的区别还是有的。

var x = 5; 
function fn(){ 
var x = 'jack'; 
eval('x=10;'); 
} 
fn(); 
alert(x); // -->5

所有浏览器中输出的都是5,说明调用fn后eval修改的是fn内的局部变量x,而非全局的x。即eval执行的闭包环境是在fn内。

修改下,把以上代码的eval换成window.eval,测试后发现各个浏览器中的表现不一样了。

IE6/7/8 : 仍然输出5,即没有修改全局变量x,修改的仍然是局部变量x。
IE9/Firefox/Safari/Chrome/Opera : 输出10,修改的是全局变量x。

可以得出结论了
IE6/7/8中,eval和window.eval一样,写在自定义函数内是局部闭包,否则是全局闭包。
IE9/Firefox/Safari/Chrome/Opera中,eval同以上IE6/7/8,window.eval即使写在自定义函数内使用的也是全局闭包。

此外:IE中的window.execScript总是在全局闭包下执行,令人惊奇的是Chrome也支持该方法。呵,Chrome策略是标准,IE一个不能少。

Javascript 相关文章推荐
用js实现下载远程文件并保存在本地的脚本
May 06 Javascript
csdn 论坛技术区平均给分功能
Nov 07 Javascript
验证javascript中Object和Function的关系的三段简单代码
Jun 27 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
Oct 26 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
Sep 22 Javascript
Js中获取frames中的元素示例代码
Jul 30 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
Dec 12 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
Feb 15 Javascript
ECMAScript6 新特性范例大全
Mar 24 Javascript
详解在Angular4中使用ng2-baidu-map的方法
Jun 19 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
Sep 26 Javascript
vue项目配置使用flow类型检查的步骤
Mar 18 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 #Javascript
jquery.validate分组验证代码
Mar 17 #Javascript
jquery中ajax调用json数据的使用说明
Mar 17 #Javascript
jQuery版Tab标签切换
Mar 16 #Javascript
jquery select(列表)的操作(取值/赋值)
Mar 16 #Javascript
jquery radio 操作代码
Mar 16 #Javascript
ajax更新数据后,jquery、jq失效问题
Mar 16 #Javascript
You might like
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python处理cookie详解
2014/02/07 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
闭幕式主持词
2014/04/02 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers