作家
登录

eval与window.eval的差别分析

作者: 来源:www.28hudong.com 2013-03-30 00:56:47 阅读 我要评论

它们之间有区别吗? 开发过程中似乎很少有人去加个额外的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一个不能少。

  推荐阅读

  利用jQuery接受和处理xml数据的代码(.net)

效果如下: 服务器端复制代码 代码如下: package com.ljq.test; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; imp>>>详细阅读


本文标题:eval与window.eval的差别分析

地址:http://www.17bianji.com/kaifa2/JS/24766.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)