发现的eval的一个小问题
首先我们来看五段代码:
第一段代码:
function test(){
eval('var a = 1;');
alert(a);
}
test();
第二段代码:
function test(){
eval('var a = 1;');
}
test();
alert(a);
第三段代码:
function test(){
eval('a = 1;');
}
test();
alert(a);
第四段代码:
function test(){
window.eval('var a = 1;');
}
test();
alert(a);
第五段代码:
function test(){
var e = eval;
e('var a = 1;');
}
test();
alert(a);
首先结果是: 第一段代码:1;第二段代码:错误;第三段代码:1;第四段代码:1; 第五段代码:1;。
之所以出现这样的结果主要是因为局部变量的原因。
首先第一段代码中,eval在test的局部环境中执行了代码:var a = 1。就相当于在test函数中执行了var a = 1。因此在test中执行alert(a)当然会输出1。
但是,在第二段代码中,将alert(a)放在了test外,那么我们知道此时的a就应该是全局的变量,但是eval执行的却是局部变量。因此,由于作用域链的原因,就会出现a未定义的错误出现。
于是在第三段代码中,eval所执行的a并没有使用var来定义,那么我们知道这就表示在修改全局变量a的值(当然这种方式在严格模式下依旧是错误的)。此时alert的a的值就可以得到。
第四段代码中,我们使用了window.eval();那么此时的eval就明确表示在window的环境下执行,那么此时执行的a就是全局变量,结果就是1了。
第五段代码,结果是1.但是目前并没有发现为何会出现这样的结果。待研究
发现的eval的一个小问题的更多相关文章
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- 为什么使用eval()将json字符串转换为对象要多加一个小括号
使用eval()将json字符串转换为对象要多加一个小括号: 关于eval()函数的具体用法这里就不多介绍了,具体可以参阅javascript的eval()方法一章节,下面就介绍一下为什么使用eval ...
- Redola.Rpc 的一个小目标
Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标:20000 tps. Concurrency level: 8 threads Complete requests: 20000 ...
- UniversalImageLoader的一个小问题
最近在使用UniversalImageLoader时遇到了一个小问题,多个地方同时通过ImageLoader.getInstance().loadImage(url, new ImageSize(dp ...
- 先定一个小目标,自己封装个ajax
你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 ...
- js中关于value的一个小知识点(value既是属性也是变量)
今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻. [1]以下这种情况是常见情况,会弹出“测试内容” <input type="button" v ...
- 关于OpenCart的一个小建议
OpenCart是一套老牌的开源自由B2C电商系统,最近watch了其托管在在github上的项目,发现还是很活跃的,每天都有人反馈bug. 初步的看一下,它是支持在后台管理多个店铺的,而且可以同一个 ...
- 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式
注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式 这个坑,必须要注意呀, 比如在用ListView的时候,如果在List_ ...
- 【开源一个小工具】一键将网页内容推送到Kindle
最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...
随机推荐
- 采用css实现流动的边框
问题起缘一个曾经做过的项目, 类似excel那样, 选中单元格并复制或粘贴时有个边框流动的效果, like this: 在前端要作出这种效果可能方法并不少, 不过我只想到了2种, 真边框与假边框, 真 ...
- Servlet学习一
Servlet担当着客户请求(Web浏览器或其它HTTP客户程序)与服务器响应(HTTP服务器上数据库或应用程序)的中间层.Servlet是位于Web服务器内部的服务器端Java应用程序,与传统的从命 ...
- P4基函数
July , P4 syms p1 p2 p3 phi(:,) = /*p1.*(*p1-).*(*p1-).*(*p1-); phi(:,) = /*p2.*(*p2-).*(*p2-).*(*p2 ...
- Android_Fragment(碎片)知识点讲解
今天我们来了解下Android 中的fragment(碎片)这个东西. Fragment 从英文翻译而言是碎片,片段的意思.那么这个东西是什么,在Android 中有什么用呢? 一.概念 Fragme ...
- iOS开发XCODE5 SVN配置 使用办法 (转) 收藏一下
标签: xcode5svn xcodesvn使用 xcode自带的svn xcodesvn版本操作 xcode自带svn版本 这两天响应老板要求,把所有代码放到公司的SVN服务器上,按照我的想法肯 ...
- asp.net LINQ连接数据库SQL执行数据的增加、修改、删除、查询操作
查询数据库中的数据 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...
- pdo 事物的处理
- 8086cpu-intel汇编指令简介
jcxz 有条件跳转指令,cx为跳转条件.如果(cx)==0则跳转到指定标号处.跳转地址在机器码中已相对位置(-128~127)给出. 相当于 if((cx)==0) ...
- IOS TableView 去除点击后产生的灰色背景
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPa ...
- Git学习(三)——暂存区、远程仓库、增删改管理
一.工作区和暂存区 工作区(Working Directory) 就是在你的电脑里能看到的目录 版本库(Repository) 工作区中的一个隐藏目录.git,这个不算工作区,而是Git版本库.Git ...