它们之间有区别吗?
开发过程中似乎很少有人去加个额外的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的差别分析,学习js的朋友可以了解下。
对window.open进行封装, 使其更好用, 且更兼容, 很多人说window.open不兼容,其实不是, 因为不能直接执行, 必须通过用户手动触发才行;看代码: 代码如下 var openWindow = function(url, options) { var str = ""; ...
当输入参数的类型为String时,它还会禁用与eval()类似的方法:1. eval('')2.(new Function(''))()3. window.setTimeout('',delay)4. window .setInterval('',delay)在网站中使用评估或类似方法时,...
//设置样式 this.setStyle = function(name, value) { eval(“this.element.style.” + name + ” = ‘” + value + “‘”); } //获取样式 this.getStyle = function(name) { return eval(“this.element....
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. ...
const { parse , eval } = window . expressionEval ; 原料药 解析中 import { parse } from 'expression-eval' ; const ast = parse ( '1 + foo' ) ; 解析的结果是AST(抽象语法树),例如: { " ty
与FOCUS()相反. 65.select()指元素为选中状態. 66.防止用户对文本框中输入文本:onfocus="this.blur()" 67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML標记符)").length 68.JS中分为两种窗体...
现在很多网站都上了各种前端反爬手段,无论手段如何,最重要的是要把包含反爬手段的前端javascript代码加密隐藏起来,然后在运行时实时解密动态执行。 动态执行js代码无非两种方法,即... window.__cr_eval = window.ev
语言:English 杀死经常用于弹出窗口和...只需覆盖window.atob,window.eval和window.open函数,即可防止它们执行应做的事情。 主要是在chrome商店中发布的,以避免chrome困扰我禁用自己设备上的“不安全”扩展程序。
杀死通常用于弹出窗口和...只需覆盖window.atob,window.eval和window.open函数,即可防止它们执行应做的事情。 最初在chrome商店中发布,以避免chrome困扰我禁用自己设备上的“不安全”扩展程序。 支持语言:English
e.Item.Attributes.Add("onclick","window.open('Default.aspx?id=" + e.Item.Cells[0].Text + "');"); } 双击表格连接到另一页 在itemDataBind事件中 if(e.Item.ItemType == ListItemType.Item || e....
return window . location . href } , function ( err , results ) { // Handle the results in node.js console . log ( results ) } ) 或者您想编写一个包含使用的所有 Ember 路由的 JSON 文件? var ...
eval(visble_property_printview + " = \"" + visble_property_false + "\""); } function window.onafterprint() { eval(visble_property_printview + " = \"" + visble_property_true + "\""); } //-->
< %# DataBinder.Eval(Container.DataItem, "数据字段1")%>’ & name=’<% # DataBinder.Eval(Container.DataItem, "数据字段2")%>’ /> 7.表格点击改变颜色 if (e.Item.ItemType == ListItemType.Item ||e....
Table of Contents 1. Introduction....................................................................................................................................................2 ...
自己学习中收集整理的技术文档,文章来源互联网,本文档只...window.location.href在firefox中不兼容的解决办法 ASP.NET 2.0中合并 GridView 的表头单元格 创建表头固定,表体可滚动的GridView VS2005常用快捷键 ...
该插件引入了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....