【JavaScript】关于eval( )

为什么80%的码农都做不了架构师?>>>   hot3.png

一、eval() 动态执行时使用当前函数的闭包。
var i = 100;
function myFunc(ctx) {var i = 'test';eval('var test = "hello."');  //test执行后为局部变量
}
myFunc();
// 输出值100
alert(i);
二、eva l() 访问全局闭包:

1、IE内核环境下:
      在 Internet Explorer 中的 JScript 的 eva l() 下,无 论是使用 window.eva l 调用,还是使用 window 作为传入的 this 实例,都不可能让 eva l()  得到访问全局闭包的能力。不过 JScript 中可以使用另一种方法来 得到完全相同的效果,即在 window.execScript() 方法中执行的代码“总是”在 全局闭包中执行。
// 本例建议在Internet Explorer 环境中测试
var i = 100;
function myFunc() {window.execScript('i = "test"');//execScript('i = "test"');
}
myFunc();
// 输出值'test', 表明调用myFunc()时修改了全局闭包中的变量i
alert(i);
      而且, JScript   运行在名为 ActiveScript 的脚本环境中,该 execScript() 方法也提 供跨脚本语言的代码能力。因此也可以在第二个参数中指定语言的种类。
execScript('i = "test"', 'JScript');
或
execScript('dim i = "test"', 'VBScript');
2、非 IE内核环境下:
// 本例建议在mozilla firefox 环境中测试
var i = 100;
function myFunc() {window.eval('i = "test"');//eval.call(window, 'i = "test"');
}
myFunc();
// 输出值'test', 表明调用myFunc()时修改了全局闭包中的变量i
alert(i);
三、解决eval作用域的方法:
with ( objContext )eval (strScript) 。  
with ( window )eval (strScript) ; //eval在 全局作用域中执行
四、使 用eval()来获取“对象直接量”:
// 用eval()来获取“对象直接量”的正确方法, 返回对象
alert( eval('({  name: "MyName", value: 1 })' )); //注意外层的括号({ name: "MyName",value: 1 })
五、使用eval() 获取匿名函数:
var func = eval(' (function() { })');
// 输出'undefined'
alert(typeof func);
var func;
eval( 'function func() { }' );
// 输出'function'
alert(typeof func);
必须使用匿名函数的情况:
//var func = eval(' (function() { }).prototype.constructor ');
//var func = eval('( {$:function() { }}).$');
// 或
var func = eval(' [function() { }][0]');
// 输出'function'
alert(typeof func);

转载于:https://my.oschina.net/aram/blog/114537

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在ASP.Net Core和JAVA中,使用Azure配置密钥——Key Vault

思路浅析 在软件开发中,项目安全是重中之重,特别是在多部门或者开源项目中,如何保存我们的密钥,但又不影响本地的开发,更需要我们开发者需要考虑的问题,这里简单的列举了下平时开发中我们做的…

我怀疑对象做了什么对不起我的事......

1 狗狗已经这么明显提醒你了▼2 传销老总都怕的传销......▼3 和一只狗撞衫了▼4 你信吗?我跳水不会湿头发!▼5 东北雪糕行业繁荣的原因还挺在理▼6 打了个平手?▼7 缅甸网红苏娜英腰围35公分她还想减▼8 哈哈哈哈▼你点的每个赞&…

jQuery 事件和动画

jQuery 事件和动画 上回说到jQuery的选择器,大家都应该知道了,jQuery的使用可以让我们少写很多的代码,达到一个轻量级的效果,那么既然都有选择器等等方便,那么事件的使用肯定也是不可能缺少的,另外还加入一…

Android之用SingleTask和TaskAffinity解决手机截取的项目启动页面问题

今天做的远程截屏功能,服务端发一个命令下来,然后客户端截屏,截屏的代码已经写好,因为是跨进程通信的,我最后采取的办法是启动activity来实现的,但是问题来了,如果用户没有登录的情况下,可以截屏到任何页面,但是登录了之后,不在本应用里面切换的话,会回到应用的页面…

html怎么用excel打开乱码,我的Excel表格打开就乱码了,请问该如何修复?

回答: 第一种方法:采取直接修复最新版本的Excel具有直接修复受损文件的功能,大家可以利用Excel新增的“打开并修复”命令,来直接检查并修复Excel文件中的错误,只要单击该命令,Excel就会打开一个修复对话框&…

汽车模型身上出现反射效果

博客列表: www.1111kp.info, www.163123.info, www.360111.info, www.360123.info, www.6699ysk.info, www.aaafaipiao.com, www.bbbkp123.info, www.fp1111.info, www.fp1234.info, www.fpfuzhou.com, 3dsmax导出的模型,默认材质是漫反射(diffuse&…

记一次 .NET 某市附属医院 Web程序 偶发性CPU爆高分析

一:背景 1. 讲故事这个月初,一位朋友加微信求助他的程序出现了 CPU 偶发性爆高,希望能有偿解决一下。从描述看,这个问题应该困扰了很久,还是医院的朋友给力,开门就是 100块 红包 🤣&#x1f923…

执行CMD命令

可以执行多条命令,用“\r\n”分割 1 using System;2 using System.Diagnostics;3 4 namespace Tool5 {6 7 public class CMDHelper8 {9 public static string[] ExeCommand(string commandText) 10 { 11 12 Process p new Pr…

[iOS]应用内支付(内购)的个人开发过程及坑!

本文基于XcodeVersion 7.3 (7D175)版本,手机是iPhone 6,9.3系统。 一. 创建测试App 首先你需要登录 App的ItunesConnection,你会看到如下界面 简单的介绍一下这几个选项 1.我的App主要用于管理自己的App应用,例如编辑资料&…

Android之Intent 序列化反序列化

我们做截屏功能的时候,因为有2个进程,本来是把intent和MediaProjection放到Application里面,但是由于跨进程了,所以数据拿不到,就采用了Parcel 序列化出错,未找到出错的原因,找其它的解决方法: 查看Intent 的源代码, 发…

农商银行招聘计算机人员考什么,农商银行招聘考试题都考什么?

整理了农商农商一、行政职业能力测试类农商银行行测考试题型主要以选择题形式出现。主要包括言语理解、数量关系、判断推理、资料分析、常识五大部分。二、英语类农商银行考试英语部分:一般银行英语考试内容包括英语词汇与语法、英汉互译、改错、完型填空和阅读理解…

一步步学习微软InfoPath2010和SP2010--第八章节--使用InfoPath表单Web部件

本章中,你将学习到: 1. 配置Web部件设置 2. 创建Web部件连接 3. 创建表单参数 4. 使用其他浏览器表单参数 你可以使用InfoPath表单Web部件(Microsoft SharePoint2010新引入的)在SharePoint企业版或Microsoft…

讲一讲应用服务的新鲜事儿

微软中国MSDN 点击上方蓝字关注我们为了新功能的发布,以及 Linux 和 Windows 的改进,Azure App Service 团队付出了非常多的努力。很开心的是,我们看到了 Windows Containers 的正式版本,并可应用于 App Service 环境 v3 上。此外…

运维自动化之基于python语言的文字界面的运维管理软件

之前开发了phpmysqlshell运维监控系统,监控起来很方便,但在运维管理方便还是不能实现,所以最近打算使用python语言编写一套的运维管理系统,可以使用单台或多台机器同时管理与部署等功能,实现类似func、triaquae等管理软…

Android之4.0新特性

Android 4.0 平台 API等级:14 Android 4.0 是一次重要的平台发布版,为用户和应用程序开发者增加了大量的新特性。在下面我们将讨论的所有新特性和API中,因为它将 Android 3.x 版本中广泛使用的API和全息图像主题带给了小屏幕设备,因此我们说 Android 4.0 是一次重要的平…

iOS中的动画

2019独角兽企业重金招聘Python工程师标准>>> iOS中的动画 Core Animation Core Animation是一组非常强大的动画处理API,使用它能做出非常绚丽的动画效果,而且往往是事半功倍,使用它需要添加QuartzCore .framework和引入对应的框架<QuartzCore/QuartzCore.h>…

Debian7 apt源设置

刚装完系统时是没有 apt-spy 的&#xff0c;这时候我们可以暂时先找个可用的源代替&#xff0c;如&#xff08;写在 /etc/apt/sources.list 中&#xff09;&#xff1a; deb http://http.us.debian.org/debian/ stable main 执行以下命令更新软件包列表&#xff1a; apt-get up…

Android之6.0上的重要变化(一)

伴随着众多新特性和新功能,Android6.0(API level 23)在系统和API上都有着诸多的改变。本文着重介绍几个关键变化,以帮助你理解这些改变对你的APP产生的影响。 一、运行时权限检查(Runtime Permisssions) 此次发布引入了一个新的权限管理模型,使得用户能够在运行时控…