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 相关文章推荐
Javascript 加载和执行-性能提高篇
Dec 28 Javascript
深入理解Javascript中的循环优化
Nov 09 Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 Javascript
JS判断form内所有表单是否为空的简单实例
Sep 09 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
Oct 30 Javascript
利用VUE框架,实现列表分页功能示例代码
Jan 12 Javascript
原生js实现可拖动的登录框效果
Jan 21 Javascript
详解vue 数据传递的方法
Apr 19 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 Javascript
详解微信小程序开发(项目从零开始)
Jun 06 Javascript
小程序分页实践之编写可复用分页组件
Jul 18 Javascript
JS/CSS实现字符串单词首字母大写功能
Sep 03 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
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
番茄的表单验证类代码修改版
2008/07/18 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
Python Map 函数的使用
2020/08/28 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
好的旅游活动方案
2014/08/19 职场文书
暑期培训班策划方案
2014/08/26 职场文书
2016春节慰问信范文
2015/03/25 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android