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 相关文章推荐
Jquery作者John Resig自己封装的javascript 常用函数
Nov 09 Javascript
JavaScript 原型与继承说明
Jun 09 Javascript
Javascript 中的 call 和 apply使用介绍
Feb 22 Javascript
jquery 表格的增行删行实现思路
Mar 21 Javascript
swtich/if...else的替代语句
Aug 16 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
javascript数据类型详解
Feb 07 Javascript
浅谈angular4实际项目搭建总结
Dec 01 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
Jan 31 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
Mar 08 Javascript
npm 更改默认全局路径以及国内镜像的方法
May 16 Javascript
Vue-cli项目部署到Nginx服务器的方法
Nov 01 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
Bootstrap按钮组实例详解
2017/07/03 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
pandas带有重复索引操作方法
2018/06/08 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
法律专业应届生自荐信范文
2014/01/06 职场文书
六查六看自查材料
2014/02/17 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
参加招聘会后的感想
2015/08/10 职场文书
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技