標籤: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 基礎知識