首页 > 代码库 > Javascript 深入了解Javascript 基础知识

Javascript 深入了解Javascript 基础知识

eval全局函数

dojo 的加载器中会看到以下一个函数
   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()

dojo的kernal模块中也会有一个eval函数, 代码和解释如下 

(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 基础知识