IE 当eval遇上function的处理


Posted in Javascript onAugust 09, 2011

情况1:eval里没有function,直接执行:
eval("alert('ss');");//所有浏览器正确均输出
情况2:eval里有function,function立即执行:
eval("(function(){alert('ss');})();");//所有浏览器正确输出
情况3:eval里有function,使用变量保存function引用并调用该function:
var f=eval("(function(){alert('ss');})");
f();//IE下报错:缺少对象 其他浏览器正常
当在eval定义一个function并返回给变量时,IE报错:缺少对象。可见IE下eval里定义的function并不能成功返回到eval外部。

解决方法:使function对象作为一个执行结果返回:

方法1:

var f=eval("(function(){ return function(){alert('ss');}})()");
f();//所有浏览器正确输出
eval里调用一个立即执行的函数,该函数执行之后返回一个function对象,此时该function对象的引用成功返回到外部变量。

方法2:

var f=eval("(false||function(){alert('ss');})");
f();//所有浏览器成功输出
该方法也是jquery里使用的方法,function作为或表达式的执行结果返回,同样能成功解决问题。当然,表达式并不局限于上面的false||function(){},各种表达式只要能成功返回function,均可解决问题:

/* 与表达式:*/
var f=eval("(true&&function(){alert('ss');})");
f();//所有浏览器正常输出

/* 三元表达式:*/
var f=eval("(true?function(){alert('ss');}:'');");
f();//所有浏览器正常输出

Javascript 相关文章推荐
Highcharts 非常实用的Javascript统计图demo示例
Jul 03 Javascript
jQuery插件slides实现无缝轮播图特效
Apr 17 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
Jul 27 Javascript
js实现select下拉框菜单
Dec 08 Javascript
jquery.validate 自定义验证方法及validate相关参数
Jan 18 Javascript
CSS或者JS实现鼠标悬停显示另一元素
Jan 22 Javascript
浅谈Web页面向后台提交数据的方式和选择
Sep 23 Javascript
vue组件中使用iframe元素的示例代码
Dec 13 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
Dec 13 Javascript
解决vue项目报错webpackJsonp is not defined问题
Mar 14 Javascript
vue axios登录请求拦截器
Apr 02 Javascript
Node.js中你不可不精的Stream(流)
Jun 08 Javascript
取得窗口大小 兼容所有浏览器的js代码
Aug 09 #Javascript
Javascript实现的类似Google的Div拖动效果代码
Aug 09 #Javascript
基于Jquery的文字自动截取(提供源代码)
Aug 09 #Javascript
JQuery动态创建DOM、表单元素的实现代码
Aug 09 #Javascript
用JS判断IE版本的代码 超管用!
Aug 09 #Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
Aug 09 #Javascript
js 分页全选或反选标识实现代码
Aug 09 #Javascript
You might like
一个用于MySQL的PHP XML类
2006/10/09 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
node.js超时timeout详解
2014/11/26 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
vue.js的安装方法
2017/05/12 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
EJB的基本架构
2016/09/22 面试题
大学四年规划书范文
2013/12/27 职场文书
聘任书模板
2014/03/29 职场文书
保护环境倡议书范文
2014/05/13 职场文书
简单租房协议书范本
2014/08/20 职场文书
学困生转化工作总结
2015/08/13 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL