深入认识javascript中的eval函数
来源:http://wanyij.blog.51cto.com/46570/43794
发现为本文起一个合适的标题还不是那么容易,呵呵,所以在此先说明下本文的两个目的:
(1)介绍javascript中的eval函数的用法
(2)如何在函数内执行全局代码
eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。
需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值,简单示例如下:
var code2='{a:2}'; //语句
alert(eval(code1)); //->'a2'
alert(eval(code2)); //->undefined
alert(eval('(' + code2 + ')')); //->[object Object]
function demo1(){
eval('var s="local"');
}
demo1();
alert(s); //->global
所以最后的输出是global并不是什么奇怪的事情,毕竟大家都能很清楚的区分局部变量和全局变量。
仔细体会一下,可以发现eval函数的特点,它总是在调用它的上下文变量空间(也称为:包,closure)内执行,无论是变量定义还是函数定义都是如此,所以如下的代码会产生函数未定义的错误:
function demo2(){
eval(s);
}
demo2();
alert(test()); //->error:test is not defined
而在实际的Ajax开发中,有时我们需要从服务器动态获取代码来执行,以减轻一次载入代码过多的问题,或者是一些代码是通过Javascript自身生成的,希望用eval函数来使其执行。
但这样的动态获取代码的工作一般在函数内完成,比如:
var code=getCode();
eval(code);
}
X2.Eval=function(code){
if(!!(window.attachEvent && !window.opera)){
//ie
execScript(code);
}else{
//not ie
window.eval(code);
}
}
function demo3(){
X2.Eval('var s="local"');
}
demo3();
alert(s); //->'local'
需要注意的是X2.Eval并不返回值,如果要进行表达式的求值,还是用系统的eval函数。X2.Eval设计为仅做全局代码定义用。
(1)对于IE浏览器,默认已经提供了这样的函数:execScript,用于在全局空间执行代码,只是知道的人还不多。
(2)对于Firefox浏览器,直接调用eval函数,则在调用者的空间执行;如果调用 window.eval则在全局空间执行。这个知道的人估计就更少了。毕竟alert(eval==window.eval)返回true!
name as an Identifier which is the MemberExpression in a CallExpression), or if the eval property is assigned to,
an EvalError exception may be thrown.
深入认识javascript中的eval函数相关推荐
- 关于js中的eval函数
关于JS中的eval()函数 eval()函数的定义和用法 JavaScript中的 eval() 函数可以计算eval中的参数(JavaScript 字符串),并把它作为脚本代码来执行. ...
- java 动态字符串_Java动态编译执行一串字符串,类似于Javascript里的eval函数
Javascript里的eval函数能动态执行一串js脚本. 那Java里怎么做到呢. 有两种方法: 一种是使用可以执行js脚本的Java类 ScriptEngineManagerpublic sta ...
- JavaScript中的工厂函数vs构造函数vs class
原文链接:JavaScript Factory Functions vs Constructor Functions vs Classes 作者:Eric Elliott 译者:sunny 转载需提前 ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- 关于javascript中的回调函数
关于javascript中的回调函数 原文地址:http://blog.csdn.net/sicluoyi/article/details/1737969 考虑一个这样的例子: 假如某个项目的底层和高 ...
- JavaScript中语句与函数的执行辨析
文章出自个人博客https://knightyun.github.io/2018/05/23/js-anonymous-function,转载请申明. Javascript代码中,语句和函数以及匿名函 ...
- 如何找到JavaScript中的调用者函数?
function main() {Hello(); }function Hello() {// How do you find out the caller function is 'main'? } ...
- jQuery中的read 和JavaScript中 的onload函数的区别
2019独角兽企业重金招聘Python工程师标准>>> 在JavaScript中,onload函数是最经常用到的,这个函数的作用是等待网页完全加载之后再去执行代码块中的语句,因为按照 ...
- 在javascript中使用纯函数处理副作用
在javascript中使用纯函数处理副作用 今天给大家带来一片译文, 详情请点击这里.可能在墙内哦 开始了, 如果你点开这篇文章, 就证明你已经开始涉及函数式编程了, 这距离你知道纯函数的概念不会很 ...
最新文章
- 年薪达60万!11位院士领衔,这座举全省之力打造的科研平台诚聘博士英才
- linux 中关于网络的配置方法
- Linux Shell 命令--grep
- 江苏省计算机学会科学技术奖,孙国梓
- saturate_cast<uchar>(int v)的作用
- Web前端开发薪资待遇及发展前景解读
- 转载:tensorflow保存训练后的模型
- python中的构造函数_python构造函数init实例方法解析
- leetcode刷题:求容器中能乘最大多少水
- Linux学习—编译
- 用vuejs如何实现ajax,vuejs使用FormData实现ajax上传图片文件
- 安卓手机使用远程软件TeamViewer
- webpack 代码压缩优化篇
- codeup 1006
- 强化学习实战-使用Q-learning算法解决悬崖问题
- 云计算ACP弹性计算服务(二)
- 数据驱动运营决策-框架与方法(下)
- 记WSL下MySQL安装和使用BUG
- 2022-2028全球2-氨基-5-甲基吡啶行业调研及趋势分析报告
- java强制转换用法_Java入门课|这才是Java强制类型转换的正确使用方法,你真的会用这些吗...
热门文章
- C#实现查找指定端口被哪个进程占用并处理进程及dos命令下操作
- 线程中发送消息阻塞问题解决
- MFC创建模态对话框和非模态对话框的方法
- C#中的线程(一)入门
- mysql怎么创建自动作业_mysql 让一个存储过程定时作业的代码
- python r语言培训_r语言和python学哪个
- python处理word文档保留格式_python 处理document文档 保留原样式
- lamda过滤_java 使用Lambda和filter对对象集合过滤
- python pymysql cursors_python pymysql cursor的问题
- c++ socket线程池原理_ThreadPoolExecutor线程池实现原理+源码解析