eval & window.eval & window.execScript 的區別

eval & window.eval & window.execScript 的區別

首先看一下 eval 和 window.eval 的區別閉包

直接看示例代碼:測試

var x = 2;

var test = function(){
   var x = 5;
   eval('alert(x)');
};

var test_win = function(){
   var x = 6;
   window.eval('alert(x)');
};

alert(x);           // IE6/7/8/9/Chrome/Ff: 2

test();             // IE6/7/8: 5, IE9/Chrome/Ff: 2

test_win();         // IE6/7/8: 6, IE9/Chrome/Ff: 2

這裏首先定義了一個全局變量x,而後分別在 test 和 test_win 的局部閉包內定義了變量x。能夠看到 eval 引用的局部變量的x,而 window.eval 引用的是全局變量x(在IE9,Chrome,FF下)。this

各位看官看到這裏應該已經發現了,在IE6/7/8下還有兼容性的問題,就是說eval和window.eval在IE6/7/8下的做用是同樣的。spa

那如何才能兼容IE6/7/8呢?這個時候 window.execScript就派上用場了,並且這個玩意也只有IE才支持。code

將上面的 window.eval 換成 window.execScript,IE下面測試結果也是返回 2,bingo!blog

總結:ip

eval 做用於局部做用域,window.eval 和 window.execScript 做用於全局做用域,也能夠等價的這麼看作用域

eval === eval.call(this, str);io

window.eval === eval.call(window, str);function

相關文章
相關標籤/搜索