eval函数的一点tips
来源:互联网 发布:网络直销项目 编辑:程序博客网 时间:2024/06/05 12:50
eval简介
关于eval这个函数,常见的用法是用来执行含有js代码的字符串,注意这里要传递原始字符串,而不是一个string对象。
eval("1+2") // 返回3eval("var i = '1+2'") // var i = 3;
实际程序中极少使用它,常见用法是编写作为递归的js解释器程序,或者编写动态生成并计算js代码的程序。
别名调用和直接调用的区别
eval函数可以通过赋予别名来实现调用,虽然ES3禁止这么做(会抛出一个EvalError异常),但是大多数的实现都允许别名调用的方式。
ES5中进一步规范了Eval的行为,别名调用和直接调用Eval的情况有所不同
直接的eval,当直接使用非限定的eval名称来调用eval()函数时,通常成为直接eval(direct eval),此时,它总是在调用它的上下文作用域内执行。其他的调用如别名调用则始终使用全局对象作为上下文作用域,并且无法读/写/定义局部变量和函数。
——摘自《javascript权威指南》第六版
如下所示
var geval = eval; var x = 100; function f1() { var x = 200; console.log(eval("x + 100")); } function f2() { var x = 200; console.log(geval("x + 100")); } f1(); // 300; f2(); // 200
f1使用直接的eval(direct eval),在局部上下文作用域执行,f2中的eva是别名调用,所以始终在全局作用域中执行
eval需要注意的问题
由于eval函数需要运行编译器来编译(parse)传递给他的js字符串——这一点,setInterval和setTimeout也是一样的——所以会降低你的执行效率,而有时候使用eval不过是为了执行一条赋值语句而已,所以应该尽量避免使用。
同时,eval也会被用来和XMLHttpRequset(Ajax)配合,来将服务器传递过来的json数据进行编码,然而这里面因为会存在安全问题,所以应该尽量使用JSON.parse这个函数来代替,这个函数遇到有安全问题的JSON数据会抛出一个异常。
阅读全文
0 0
- eval函数的一点tips
- Xming的一点tips
- 【MFC】CString的一点tips
- eval函数的用法
- eval()函数的用法
- JavaScript的eval()函数
- js的 eval()函数
- javascript的eval函数
- eval函数的问题
- eval()函数的使用
- eval()函数的作用
- python的eval()函数
- eval()函数的用法
- JS的eval函数
- eval()函数的注意事项
- python 的eval()函数
- eval函数的用法
- eval()函数的作用
- 数组指针和指针数组
- Python 机器学习实战教程:回归
- Golang 全面展示反射技术使用 (一)
- Spark MLlib Kmeans源代码解读(上)
- ARC下dealloc过程及.cxx_destruct的探究
- eval函数的一点tips
- 区间DP经典三道题目
- Spring MVC、Spring、MyBatis、Maven整合开发
- cordova 安卓 返回键 点击 两次 退出应用
- 用到的linux命令
- [LibreOJ β Round]ZQC的树列
- 命令空间
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock
- xhsell 配置虚拟主机重要一步