eval与window.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的差别分析
它们之间有区别吗? 开发过程中似乎很少有人去加个额外的window,觉得多此一举.比如Ajax过程中回调函数解析JSON格式字符串 复制代码 代码如下: ... function callback(str){ var json = eval('(' + str + ')'); } ... 通常直接使用eval,而非var json = window.eval('(' + str + ')'); 又比如调试时使用alert,很少有人使用window.alert:IE中获取事件对象使用event,很
-
Python中eval带来的潜在风险代码分析
0x00 前言 eval是Python用于执行python表达式的一个内置函数,使用eval,可以很方便的将字符串动态执行.比如下列代码: >>> eval("1+2") >>> eval("[x for x in range(10)]") [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 当内存中的内置模块含有os的话,eval同样可以做到命令执行: >>> import os >>&g
-
eval(cmd)与eval($cmd)的区别与联系
这个问题一直困扰我许久,今天终于解决清楚了 问题1:eval的执行是否需要双引号包括: 先看三个命令: A:<?php eval(system(dir))?> B:<?php $cmd="system(dir)"; eval($cmd)?> A结果: B结果: 报错 思考: 同样是一个命令,为什么会出现如此区别,询问了其他师傅得知:eval执行的是变量的值的时候,该变量值需要闭合,也就是必须是一个完整的语句,需要用分号结尾.根据这个道原理我们改一下上面的命令看看
-
JS使用eval解析JSON的注意事项分析
本文较为详细的分析了JS使用eval解析JSON的注意事项.分享给大家供大家参考,具体如下: 在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的each方法来遍历 用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是json对象,这里考虑的都是服务器 返回JSON形式的字符串的形式,对于利用JSONO
-
ASP Eval、Execute、ExecuteGlobal区别分析
Eval 计算一个表达式的值并返回结果. 语法:[result = ]eval_r(expression_r) expression_r 为任意有效 VBScript 表达式的字符串 示例: 复制代码 代码如下: response.Write(eval_r("3+2")) '输出 5 "3+2" 使用引号括起来,表示是一个字符串,但是在 Eval "眼里",把它当作一个表达式 3+2 来执行. Execute 执行一个或多个指定的语句.多个语句间
-
js的window.showModalDialog及window.open用法实例分析
本文实例讲述了js的window.showModalDialog及window.open用法.分享给大家供大家参考.具体分析如下: 一.window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二.基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口句柄 parameters 为窗口参数(各参数用逗号分隔) 三.示例: <SCRIPT>
-
MySQL InnoDB和MyISAM数据引擎的差别分析
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能. MyIASM是IASM表的新版本,有如下扩展: 二进制层次的可移植性. NULL列索引. 对变长行比ISAM表有更少的碎片. 支持大文件. 更好的索引压缩. 更好的键吗统计分布. 更好和更快的auto_increment处理. 以下是一些细节和具体实现的差别: 1.InnoDB不支持FULLTEXT类型的索引. 2.InnoDB 中不保存表的具体行数,也
-
javascript window.opener的用法分析
window.opener 的用法 window.opener 返回的是创建当前窗口的那个窗口的引用,比如点击了a.htm上的一个链接而打开了b.htm,然后我们打算在b.htm上输入一个值然后赋予a.htm上的一个id为"name"的textbox中,就可以写为: window.opener.document.getElementById("name").value = "输入的数据"; 对于javascript中的window.opener没
-
javascript eval(func())使用示例
eval的作用其实很简单,就是把一段字符串传递给JS解释器,由Javascript解释器将这段字符串解释成Javascript代码,并且执行他. 举个最简单的例子: 复制代码 代码如下: <script type="text/javascript"> eval("alert(1+1)"); script> 很简单,把字符串解释成JS代码并执行,弹出2. 当然,上面的例子只是个玩具,在实际中没有人会傻到这么用.我想大家最基本的使用eval函数都是应该
-
Javascript学习笔记4 Eval函数
eval的作用其实很简单,就是把一段字符串传递给JS解释器,由Javascript解释器将这段字符串解释成Javascript代码,并且执行他. 举个最简单的例子: 复制代码 代码如下: <script type="text/javascript"> eval("alert(1+1)"); </script> 很简单,把字符串解释成JS代码并执行,弹出2. 当然,上面的例子只是个玩具,在实际中没有人会傻到这么用.我想大家最基本的使用eval函
随机推荐
- Javascript实现可旋转的圆圈实例代码
- GO语言实现简单TCP服务的方法
- Python获取文件ssdeep值的方法
- 基于jquery的二级联动菜单实现代码
- ext jquery 简单比较
- 基于php socket(fsockopen)的应用实例分析
- 详解C#中通过委托来实现回调函数功能的方法
- Android DragVideo实现播放视频时任意拖拽的方法
- JavaScript多线程详解
- linux vi命令一览表
- 21天学习android开发教程之MediaPlayer
- JsRender for object语法简介
- js抽奖实现随机抽奖代码效果
- wordpress之wp-settings.php
- window.open的功能全解析
- javascript获取网页各种高宽及位置的方法总结
- Windows Script Host终止的解决方法
- 禁止IP访问网站的多种方法分享(linux,php,nginx,apache)
- Nginx+IIS简单的部署教程
- 深入解析Java中的数据类型与变量