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 相关文章推荐
DOM2非标准但却支持很好的几个属性小结
Jan 21 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
Mar 04 Javascript
javascript记住用户名和登录密码(两种方式)
Aug 04 Javascript
跟我学习javascript的arguments对象
Nov 16 Javascript
JavaScript动态插入CSS的方法
Dec 10 Javascript
Bootstrap框架下下拉框select搜索功能
Mar 26 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
Oct 10 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
Vue组件之Tooltip的示例代码
Oct 18 Javascript
解决vuecli3.0热更新失效的问题
Sep 19 Javascript
原生js实现淘宝放大镜效果
Oct 28 Javascript
原生js+css实现tab切换功能
Sep 17 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
ADODB的数据库封包程序库
2006/12/31 PHP
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
php Xdebug的安装与使用详解
2013/06/20 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
python中的多重继承实例讲解
2014/09/28 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
Django如何批量创建Model
2020/09/01 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
美国折扣网站:jClub
2017/08/07 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
护理助产毕业生的求职信
2014/03/02 职场文书
离婚起诉书范本
2015/05/18 职场文书
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python