js-eval运算符
js中使用eval运算符需要注意——
- eval()只有一个参数
- 传入的参数是字符串时,才会去解析执行;否则,将直接返回这个参数
- 作用域与调用它的变量作用域保持一致
- 返回字符串中最后一个表达式或语句的值,如果没有,返回undefined
- eval的字符串执行时的上下文环境和调用函数的上下文环境是一样的,所以下下面这样的例子,就会报脚本错误。
function test(a) {
eval(a);
}
test("return;");
根据规定,可知,“return;”的上下文环境要和调用 test(a)的上下文环境一样,也就是全局的。因此,eval("return;");就相当于在全局环境中执行了一个return;语句,显然是错误的。
全局eval
如果对eval()赋予别名,然后使用其别名进行字符串的操作,那么规定此时eval会将字符串当成全局代码来执行。执行的代码可能会定义新的全局变量和全局函数,或者给全局变量赋值,但却不能使用或修改主调函数中的局部变量,因此,不会影响到函数内的代码优化。
在ECMAScript 5中,规定直接调用eval()时,它总是在调用它的上下文作用域内执行。其它的间接调用则使用全局对象作为其上下文作用域,并且无法读、写、定义局部变量和函数。例子如下所示:
var geval = eval;
var x = "global", y = "global"; function f() {
var x = "local";
eval( "x += ' changed' ; ");
return x;
} function g() {
var y = "local";
geval("y += ' changed';");
return y;
} console.log(f()); //local changed
console.log(x); //global
console.log(g());//local
console.log(y);//global changed
js-eval运算符的更多相关文章
- 浅谈 js eval作用域
原文:浅谈 js eval作用域 就简单聊下如何全局 eval 一个代码. var x = 1; (function () { eval('var x = 123;'); })(); console. ...
- js基础——运算符
爱创课堂前端培训--js基础 运算符一.运算符 运算符(Operators,也翻译为操作符),是发起运算的最简单形式.分类:(运算符的分类仁者见智,本课程进行一下分类.)数学运算符(Arithmeti ...
- Js的运算符
JS的运算符 1.运算符的分类: a) 算数运算符 b) 字符串运算符 c) 赋值运算符 d) 比较运算符 e) 逻辑运算符 f) 位运算符 g) 其他运算符 2.算数运算符 + 加法运算符 - 减法 ...
- js 的概念和声明-js 的变量-js 的运算符和逻辑结构-js 的数组
js 的概念和声明Js的概念和声明:问题:在网页的发展历程中,发现网页不能对用户的数据进行自动校验,和提供一些特效造成用户体验极差解决:使用JavaScript作用:可以让网页和用户之间进行直接简单的 ...
- JS eval()函数
js eval()函数 这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它. 举个小例子: //执行表达式 var the_unevaled_answer = & ...
- JS基础-运算符-函数
1.运算符 1.赋值运算符和扩展运算符 1.赋值运算符 = 2.扩展运算符 +=,-=,*=,/=,%=,^=.... ex: a=a+b;--> ...
- 表达式计算-----------eval()运算符
1.java的eval()方法(或称之为运算符)可以将字符串解析成可以运行的javaScript代码,例如 eval()只有一个参数.如果传入的参数不是一个字符串,那么它会直接返回这个参数.如果传入的 ...
- JS总结 运算符 条件语句
算术运算符+-*/ 与数学计算一致,配合()号进行各种计算 另外,+号还可以达到连接的作用.例如: var a = 15; alert("a的值等于"+a); 前后增减量运算符: ...
- JS eval() 特殊用法
最近项目有 有个模块 有若干功能菜单,这些菜单查询部分都是一样的,所以就像提取一个通用的查询页面然后使用$('#ele').load('../**.aspx #searchID', {}, funct ...
- js eval()执行传参函数的写法
.cs public class Message<T> { // 数据总数 public int? Total { get; set; } // 关键数据 public List<T ...
随机推荐
- <c:set var="ctx" value="${pageContext.request.contextPath}" />的学习
${pageContext.request.contextPath},是获取当前根目录 set var="ctx",是给这个路径定义了一个变量,用的时候可以通过EL表达式获取:${ ...
- Ros学习——Python发布器publisher和订阅器subscriber
1.编写发布器 初始化 ROS 系统 在 ROS 网络内广播我们将要在 chatter 话题上发布 std_msgs/String 类型的消息 以每秒 10 次的频率在 chatter 上发布消息 在 ...
- SpringMVC_04 拦截器 【拦截器的编程步骤】【session复习?】
待更新... 2017年5月13日22:45:31 1 什么是拦截器 spring提供的一个特殊组件,前端控制器 DispacherServlet 在收到请求之后,会先调用拦截器,再调用处理器(Co ...
- MySQL update select组合
update t_news inner join (select readCount from t_news t2 where t2.id=1) t1 set t_news.readCount = t ...
- java中下面这些引入都代表什么意思啊?
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; import java.uti ...
- kindeditor坑
用document.getElementById("form1").submit提交,存在缓存问题,经常接收不到textarea数据
- 导入project后lib文件夹一直没有jar包
原因: 导入project,倒错了项目,只因为后面新建的项目名称有和前面的差不多,导致自己选择了原来的项目,因此,项目的注解一直报错.
- 后台调js方法
Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>btnSearch( ...
- 遍历一个二维数组的简便方法(减少foreach次数)
在一些特定场合可以使用下, 还是有局限性 输出结果 : 另一种场景 : 输出结果 : 更复杂的场景 : 输出结果 :
- “网易大数据讲堂第一期:数说”直播活动资料:课程回放收看及PPT下载
欢迎访问网易云社区,了解更多网易技术产品运营经验. "网易大数据讲堂第一期:数说"直播活动昨晚顺利举行.感谢各位"数"友的支持和参与. 本次活动PPT可点击这里 ...