表达式计算-eval
来源:互联网 发布:新商盟软件下载 编辑:程序博客网 时间:2024/06/05 01:52
例:
var geval=eval;var x="global";var 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(),x);console.log(g(),y);
大家猜一猜运行的结果会是什么?
运行的结果为:localchanged global
local globalchanged
为什么呢?
直接使用eval的时候,它使用的是调用它的并变量作用域。因此,在函数f中直接使用eval函数时,它的执行修改的是调用它的作用域的变量,即局部作用域。所以,局部变量x被修改,而全局变量x未被改变。
而通过其它方式调用时(比如别名调用),它则使用的是将全局对象作为作为其上下文作用域。因此,在函数f中通过eval修改的是全局变量y,局部变量y未被改变。
例:
console.log(eval("var a=1;"));它的运行结果是:undefined.
在eval运行编译无错时,开始执行代码,并返回最后一个表达式的值,无值时则返回undefined。
因为字符串只是定义变量,无值返回,因此结果为undefined。
例:
var f=function(a){ eval(a);};f("return;");
运行结果:抛出语法错误:return not in function。
再次强调:eval的字符串执行的上下文环境和调用函数的上下文环境是一致的。return只有在函数中运行才是有意义的,不能将其作为函数的一部分来执行。所以,执行f("function a(){return 0;}")才不会抛出错误。
0 0
- 表达式计算-eval
- JavaScript表达式计算 eval
- 02 计算字符串表达式 [类似于js eval函数]
- JavaScript eval()表达式
- .NET 实现Eval(文字列表达式计算)的3种实现方法。
- 表达式计算
- 表达式计算
- 表达式计算
- 表达式计算
- 表达式计算
- 表达式计算
- 表达式计算
- 计算表达式
- 表达式计算
- 表达式计算
- 表达式计算
- 表达式计算
- 表达式计算 .
- 人呐
- CF#323-DIV2-C - GCD Table - 贪心GCD
- Manacher算法求回文子串
- 最邻近点问题----分治法
- Java集合框架
- 表达式计算-eval
- 第四周 项目2-建设“单链表”算法库
- tomcat一闪而过的解决方法!
- ios-技术总结
- ST(稀疏表)算法
- php 成员变量赋值用连接符报错
- hdu 5495 BestCoder Round #58 (div.2) 1002
- App不得不用的控件
- 类似网易新闻分类排序的源码,已经不知道转自哪里,抱歉