浅谈 js eval作用域

就简单聊下如何全局 eval 一个代码。
var x = 1;
(function () {
eval('var x = 123;');
})();
console.log(x);
这个代码得到的是 1 而不是 123
如果想让 eval 执行的代码是全局的,那么有几种方法。
var x = 1;
(function () {
window.eval('var x = 123;');
})();
console.log(x);
这个方法标准浏览器都可以得到 123 而IE6-8则依然是 1
相同的例如
var arr = [0,0,0,0,0,0];
(function () {
var arr = [1,1,1,1,1,1];
var _eval = eval;
window.eval('arr[0] = 123;');
eval.call(null, 'arr[1] = 123;');
_eval('arr[2] = 123;');
(0,eval)('arr[3] = 123;');
})();
console.log(arr);
0,1 貌似不支持IE8- 2,3 貌似不支持 IE7-
反正归根结底就是兼容性有问题。
不过还在IE下有个 execScript 非常好使。
var x = 1;
(function () {
(!-[1,] ? execScript : eval)('var x = 123;');
})();
console.log(x);
这样基本上就全兼容了。

好了,今天就分享这么个小知识点了。
浅谈 js eval作用域的更多相关文章
- 浅谈js变量作用域
变量的作用域也是前端面试题常考的一个问题,掌握下面几个规律可以帮你更好的理解js的作用域. 1.作用域优先级遵循就近原则,函数内部的作用域优先级大于外部 var a=456; var b=111; f ...
- 浅谈JS的作用域链(一)
JS的执行环境 执行环境(Execution context,EC)或执行上下文,是JS中一个极为重要的概念. 在JavaScript中有三种代码运行环境: Global Code JavaScrip ...
- 浅谈JS的作用域链(三)
前面两篇文章介绍了JavaScript执行上下文中两个重要属性:VO/AO和scope chain.本文就来看看执行上下文中的this. 首先看看下面两个对this的概括: this是执行上下文(Ex ...
- 浅谈JS的作用域链(二)
上一篇文章中介绍了Execution Context中的三个重要部分:VO/AO,scope chain和this,并详细的介绍了VO/AO在JavaScript代码执行中的表现. 本文就看看Exec ...
- 浅谈 js 语句块与标签
原文:浅谈 js 语句块与标签 语句块是什么?其实就是用 {} 包裹的一些js代码而已,当然语句块不能独立作用域.可以详细参见这里<MDN block> 也许很多人第一印象 {} 不是对象 ...
- 浅谈JS严格模式
浅谈JS严格模式 简介 何为严格模式?严格模式(strict mode)即在严格的条件下运行,在严格模式下,很多正常情况下不会报错的问题语句,将会报错并阻止运行. 但是,严格模式可以显著提高代码的健壮 ...
- 浅谈JS中的闭包
浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...
- 浅谈 js 字符串之神奇的转义
原文:浅谈 js 字符串之神奇的转义 字符串在js里是非常常用的,但是你真的了解它么?翻阅<MDN String>就可以了解它的常见用法了,开门见山的就让你了解了字符串是怎么回事. 'st ...
- 浅谈JS中 var let const 变量声明
浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...
随机推荐
- 【转】Android HTTP协议
前言 说到HTTP协议,那必须要说说WWW了,WWW是环球信息网(World Wide Web )的缩写,也可以简称为Web,中文名字为“万维网”.简单来说,WWW是以Internet作为传输媒介的一 ...
- oracle学习笔记(转)
命令行操作:打开服务: services.msc启动Oracle: net start OracleOraHome92TNSListener net start OracleService实例 ...
- Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物
如今我们有2种类型的怪物,并且创建的时候是写死在代码里的,这是要作死的节奏~ 所以.必须可配置.不然会累死人的. ; i < size; ++i) { int id = root[i][&quo ...
- 折返(Reentrancy)VS线程安全(Thread safety)
在Wiki上,折返例如,下面的定义(接) In computing, a computer program or subroutine is called reentrant if it can be ...
- UI设计规范
iphone\ipad.android UI设计规范对比 http://blog.163.com/leenell@yeah/blog/static/95840991201302210451710/ A ...
- hdu4758 Walk Through Squares (AC自己主动机+DP)
Walk Through Squares Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- 基于PaaS人事部门间平台多重身份的技术解决方案
1.系统状态 该系统采用一个范围的省,它包含省总部和各中心.十三市分公司.其中,各县(市)局和办事处城市管理部门:由省级总部部门管理中心,它仅包含主省党部的工作人员.另一种是不在系统中. 系统业务包含 ...
- 微软自家Dism的妙用
很多人应该都听说过Dism,是微软自带的工具,其实自从Win8发布以来Dism的功能就大幅度增强了,大家都知道系统里面有个打开关闭Windows功能, 但是在这里你只能关闭这些功能,却不能删除他们. ...
- 【ThinkingInC++】2、输入和输出流
/** *特征:输入和输出流 *时间:2014年8月8日07:37:35 *作者:cutter_point */ #include<iostream> using namespace st ...
- Building a RESTful Web Service(转)
Building a RESTful Web Service This guide walks you through the process of creating a "hello wo ...