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