js-eval运算符
JS 运算符 eval
2023-09-27 14:28:05 时间
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
相关文章
- Chrome插件popup.js提取当前tabs页面地址url + 标题title
- CSS & JS Effect – Image 倒影框
- 【前端学习】【JS】表达式和运算符
- GIS(三)——优化js版搜狗地图的brand标牌样式
- node.js池操作
- Vis.js – 基于浏览器的动态 JavaScript 可视化库
- js--数位运算符取整
- Json——js和C#对Json的操作
- js:rest 参数和扩展运算符...的用法
- JavaScript(JS) firebase 报错:TypeError: Cannot read properties of undefined (reading 'app')解决方法
- 【实战篇】38 # 如何使用数据驱动框架 D3.js 绘制常用数据图表?
- Vue.js面试题整理
- Rem.js 适配不同分辨率终端设置