var eval_ = new Function('return eval(arguments[0]);'); //Function 函数是在顶级作用域下运行, 但运行效率更慢, 但使用这种方法不会污染全局变量,并且调用的是顶级作用域
eval('var i =100;');
alert(i); // 100
eval_('var b = 100');
//alert(b); //错误, b 没有定义
var where = '我在国外'; //全局作用域的where
function test() {
var where = '我在国内'; //闭包的where
eval_('alert(where)'); //我在国外, 全局作用域
eval('alert(where)');//我在国内, 局部全用域
window.eval('alert(where)'); //我在国外 IE6/7/8 我在国内,不会采用全局作用域, 可以使用execScript
}
test()(Function("d", "d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}"))(dojo);
/*=====
dojo.eval = function(scriptText){
// 尝试在全局作用域下执行角本字符串(scriptText), 除了IE不能支持,其它浏览器都可以正确的在全局作用域下执行, IE下执行
dojo.eval('var pi = 3.14');
alert(pi) //pi undefined;
要在IE中执行全局变量
dojo.eval("window.pi = 3.14");
IE 下要执行全局变量, 只能使用execScript, 但是它不会返回值, 并且不能终止执行
*/
Javascript 深入了解Javascript 基础知识
原文:http://blog.csdn.net/cexo425/article/details/38849439