`
zha_zi
  • 浏览: 584153 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

window.eval 与eval 区别

阅读更多

它们之间有区别吗? 

开发过程中似乎很少有人去加个额外的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一个不能少。

分享到:
评论

相关推荐

    eval与window.eval的差别分析

    eval与window.eval的差别分析,学习js的朋友可以了解下。

    Javascript中封装window.open解决不兼容问题

    对window.open进行封装, 使其更好用, 且更兼容, 很多人说window.open不兼容,其实不是, 因为不能直接执行, 必须通过用户手动触发才行;看代码: 代码如下 var openWindow = function(url, options) { var str = ""; ...

    NoEval - Disable Eval()-crx插件

    当输入参数的类型为String时,它还会禁用与eval()类似的方法:1. eval('')2.(new Function(''))()3. window.setTimeout('',delay)4. window .setInterval('',delay)在网站中使用评估或类似方法时,...

    window.js 主要包含了页面的一些操作

    //设置样式 this.setStyle = function(name, value) { eval(“this.element.style.” + name + ” = ‘” + value + “‘”); } //获取样式 this.getStyle = function(name) { return eval(“this.element....

    JavaScript权威指南

    Window Control Methods Section 13.9. The Location Object Section 13.10. The History Object Section 13.11. Multiple Windows and Frames Chapter 14. The Document Object Section 14.1. ...

    expression-eval:JavaScript表达式解析和评估

    const { parse , eval } = window . expressionEval ; 原料药 解析中 import { parse } from 'expression-eval' ; const ast = parse ( '1 + foo' ) ; 解析的结果是AST(抽象语法树),例如: { " ty

    107个常用javascript语句

    与FOCUS()相反. 65.select()指元素为选中状態. 66.防止用户对文本框中输入文本:onfocus="this.blur()" 67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML標记符)").length 68.JS中分为两种窗体...

    JS中注入eval, Function等系统函数截获动态代码

    现在很多网站都上了各种前端反爬手段,无论手段如何,最重要的是要把包含反爬手段的前端javascript代码加密隐藏起来,然后在运行时实时解密动态执行。 动态执行js代码无非两种方法,即... window.__cr_eval = window.ev

    MC Kill atob-crx插件

    语言:English 杀死经常用于弹出窗口和...只需覆盖window.atob,window.eval和window.open函数,即可防止它们执行应做的事情。 主要是在chrome商店中发布的,以避免chrome困扰我禁用自己设备上的“不安全”扩展程序。

    MC杀死atob「MC Kill atob」-crx插件

    杀死通常用于弹出窗口和...只需覆盖window.atob,window.eval和window.open函数,即可防止它们执行应做的事情。 最初在chrome商店中发布,以避免chrome困扰我禁用自己设备上的“不安全”扩展程序。 支持语言:English

    。NET经典技术

     e.Item.Attributes.Add("onclick","window.open('Default.aspx?id=" + e.Item.Cells[0].Text + "');");  }  双击表格连接到另一页  在itemDataBind事件中  if(e.Item.ItemType == ListItemType.Item || e....

    phantom-eval:使用 PhantomJS 评估 URL 上的代码

    return window . location . href } , function ( err , results ) { // Handle the results in node.js console . log ( results ) } ) 或者您想编写一个包含使用的所有 Ember 路由的 JSON 文件? var ...

    java条码生存WEB版

    eval(visble_property_printview + " = \"" + visble_property_false + "\""); } function window.onafterprint() { eval(visble_property_printview + " = \"" + visble_property_true + "\""); } //-->

    ASP.NET程序中常用的三十三种代码.txt

     < %# DataBinder.Eval(Container.DataItem, "数据字段1")%>’ & name=’<% # DataBinder.Eval(Container.DataItem, "数据字段2")%>’ />  7.表格点击改变颜色 if (e.Item.ItemType == ListItemType.Item ||e....

    unix power tools

    Table of Contents 1. Introduction....................................................................................................................................................2 ...

    ASP。NET技术文档收集

    自己学习中收集整理的技术文档,文章来源互联网,本文档只...window.location.href在firefox中不兼容的解决办法 ASP.NET 2.0中合并 GridView 的表头单元格 创建表头固定,表体可滚动的GridView VS2005常用快捷键 ...

    ember-eval-helper:Ember JS评估助手

    该插件引入了e (eval)帮助器,以允许在模板中使用此语法: 这个附件不要使用eval 。 < button {{ action ( e " alert " ) " Hello " target = ( e " window " ) }} > onclick = window.alert("hello...

    实现星星跟随鼠标的特效

    if (yycnt*yybilder){eval(yydiv+".yyto=setTimeout(argStr,yyto)");} } } function YY_Mousetrace(evnt) { if (yyns4) {if (evnt.pageX) {yy_ml=evnt.pageX; yy_mt=evnt.pageY;} } else{ yy_ml=(event....

Global site tag (gtag.js) - Google Analytics