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 相关文章推荐
ASP中用Join和Array,可以加快字符连接速度的代码
Aug 22 Javascript
Javascript中Eval函数的使用
Mar 23 Javascript
解决jquery的.animate()函数在IE6下的问题
Dec 03 Javascript
浅谈Javascript面向对象编程
Nov 15 Javascript
分享经典的JavaScript开发技巧
Nov 21 Javascript
JavaScript学习笔记之取数组中最大值和最小值
Mar 23 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
Mar 26 Javascript
基于JavaScript实现窗口拖动效果
Jan 18 Javascript
深入理解Node中的buffer模块
Jun 03 Javascript
vue中v-for循环给标签属性赋值的方法
Oct 18 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
Nov 02 Javascript
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 Vue.js
整理一些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
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
有趣的javascript数组定义方法
2010/09/10 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
echarts大屏字体自适应的方法步骤
2019/07/12 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python使用filetype精确判断文件类型
2017/07/02 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
大学生个人自荐信样本
2014/03/02 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
《春雨》教学反思
2014/04/24 职场文书
房地产开发项目建议书
2014/05/16 职场文书
幼儿教师求职信
2014/05/24 职场文书
死亡证明书样本说明
2014/10/18 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
英语导游欢迎词
2015/09/30 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL