在IE下,当eval遇上function,IE下会出现怪异情况,我们用例子一步步说明

情况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();//所有浏览器正常输出

转载于:https://my.oschina.net/liangzhenghui/blog/213519

在IE下,当eval遇上function相关推荐

  1. MQTT通信之旅—当A7670C遇上A7670E

    小明在深圳,他有一个A7670C:小红在巴黎,她有一个A7670E.小明心想用他的A7670C能否给小红的A7670E发信息,想了很久没有很好的法子,结果一天晚上,做了一个梦:在MQTT的帮助下:A7 ...

  2. 当MES遇上PLC——SOAP篇(下)

    前段时间,有客户在网上看到了我们边缘计算模块产品,找到了我们,跟我们描述了他们目前遇到的问题: 某汽车零部件制造厂在进行智能工厂的升级改造,工单派发和生产顺序指定由MES系统完成,西门子1200 PL ...

  3. 当线下门店遇上AI:华为云ModelBox携手佳华科技客流分析实践

    摘要:在赋能传统门店客流经营数字化转型方面,华为云ModelBox与伙伴佳华科技合作推出的"华为云客流统计项目",算是一次成功的探索. 本文分享自华为云社区<当线下门店遇上A ...

  4. [微信小程序] 当动画(animation)遇上延时执行函数(setTimeout)出现的问题

    小程序中当动画animation遇上setTimeout函数内部使用this.setData函数,通常情况下会出现报错.本文先告诉解决方法,后分析报错原因 1.解决方法: 在 setTimeout() ...

  5. 当async/await遇上forEach

    当async/await遇上forEach 当async/await遇到forEach会有什么反应呢? 这篇文章为你揭晓. 当async/await遇上forEach 前情提要 这是在做格式化wang ...

  6. 推荐系统遇上深度学习(三十九)-推荐系统中召回策略演进!

    推荐系统中的核心是从海量的商品库挑选合适商品最终展示给用户.由于商品库数量巨大,因此常见的推荐系统一般分为两个阶段,即召回阶段和排序阶段.召回阶段主要是从全量的商品库中得到用户可能感兴趣的一小部分候选 ...

  7. [当人工智能遇上安全] 3.安全领域中的机器学习及机器学习恶意请求识别案例分享

    您或许知道,作者后续分享网络安全的文章会越来越少.但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个<当人工智能遇上安全>系列博客,详细介绍人工智能与安全相关的论文. ...

  8. 当python遇上echarts (三)绘制3D图表

    当python遇上echarts (二)绘制基本图表 文章目录 前言 3D图形配置项及方法 Grid3DOpts:三维笛卡尔坐标系配置项 Axis3DOpts:三维坐标轴配置项 add(): 共有的方 ...

  9. 当SWOOLE遇上PROTOCOL

    前言 上回我们简单介绍了一下TCP Server的工作方式以及如何用Swoole实现一个简单的TCP Server,这次我们来聊聊信息流动中,非常重要基石之一--协议(PROTOCOL). 协议,通信 ...

最新文章

  1. 很安逸的离线API文档查询工具Dash和Zeal
  2. oracle多表查询
  3. 凹凸世界服务器维护到几点,《凹凸世界》2021年7月21日更新版本停服维护公告...
  4. openfire消息通知推送_APP消息推送功能之前端后台设计
  5. jsp分割字符串并遍历
  6. mysql的介绍和安装
  7. 小齐是如何提高自己的「编程能力」的?
  8. 百万数据php7取出循环_用php处理百万级以上的数据
  9. 在计算机中添加用户名和密码是多少,在win7系统中添加网络打印机提示输入用户名和密码的解决方案...
  10. w ndows10怎么关闭启动项,win10怎么关闭开机启动项
  11. 想创业做社交产品?不妨先看看这篇文章
  12. 持有美签,加拿大签证申请攻略(内含图文)
  13. 北达科他州立大学计算机科学专业,2019上海软科世界一流学科排名计算机科学与工程专业排名北达科他州立大学排名第201-300...
  14. 怎么更改苹果账户名称_苹果新品快来了,你真的学会如何找回你的Apple ID的密码了吗?...
  15. 对象流水线 -- 工厂模式介绍 使用案例及代码演示
  16. 双软认证企业税收优惠政策
  17. lichee目录+android源码目录制作ROM
  18. (笔记)双重差分(DID)、拓展及其Stata实现
  19. 由南非世界杯足球赛的用球“JABULANI”说起
  20. 华为桌面云解决方案兼容性列表

热门文章

  1. nyoj203(迪杰斯特拉+01背包)
  2. 贪心算法之——喷水装置二(nyoj12)
  3. 关于lombok插件的使用,强大的简化代码工具
  4. 我是一只IT小小鸟读书笔记3
  5. 编译时和运行时、OC中对象的动态编译机制
  6. cmd mysql uroot p不是内部或外部命令...
  7. 解决Android抽屉被击穿问题
  8. c++学习笔记之类和对象的进阶
  9. 吴恩达 coursera AI 专项二第一课总结+作业答案
  10. 现代谱估计:多窗口谱相关性