js中执行脚本字符串方法:window.eval()/eval()
2014-04-17 16:41
232 查看
它们之间有区别吗?开发过程中似乎很少有人去加个额外的window,觉得多此一举。比如ajax过程中回调函数解析json格式字符串:
Js代码
![](http://snandy.iteye.com/images/icon_star.png)
...
function callback(str){
var json = eval('(' + str + ')');
}
...
通常直接使用eval,而非var json = window.eval('(' + str + ')');
另见:字符串转换成json的三种方式
又比如调试时使用alert,很少有人使用window.alert。但由于各个引擎实现差异,它们的区别还是有的。如下:
Js代码
![](http://snandy.iteye.com/images/icon_star.png)
var x = 5;
function fn(){
var x = 'jack';
eval('x=10;');
}
fn();
alert(x); // -->5
所有浏览器中输出的都是5,说明调用fn后eval修改的是fn内的局部变量x,而非全局的x。即eval执行的闭包环境是在fn内。
修改下,把以上代码的eval换成window.eval,测试后发现各个浏览器中的表现不一样了。
IE6/7/8 : 仍然输出5,即没有修改全局变量x,修改的仍然是局部变量x
Firefox3.6.3/Safari4/Chrome6 dev/Opera10 : 输出10,修改的是全局变量x
测试IE9 Preview2,也是输出10,IE9开始向Firefox等靠拢了。
可以得出结论了,
IE6/7/8中,eval和window.eval一样,写在自定义函数内则是局部闭包,否则是全局闭包。
Firefox/Safari/Chrome/Opera/IE9中,eval同以上IE6/7/8,window.eval即使写在自定义函数内使用的也是全局闭包。
此外:IE中的window.execScript总是在全局闭包下执行,令人惊奇的是Chrome也支持该方法。呵,Chrome策略是标准,IE一个不能少。
Js代码
![](http://snandy.iteye.com/images/icon_star.png)
...
function callback(str){
var json = eval('(' + str + ')');
}
...
通常直接使用eval,而非var json = window.eval('(' + str + ')');
另见:字符串转换成json的三种方式
又比如调试时使用alert,很少有人使用window.alert。但由于各个引擎实现差异,它们的区别还是有的。如下:
Js代码
![](http://snandy.iteye.com/images/icon_star.png)
var x = 5;
function fn(){
var x = 'jack';
eval('x=10;');
}
fn();
alert(x); // -->5
所有浏览器中输出的都是5,说明调用fn后eval修改的是fn内的局部变量x,而非全局的x。即eval执行的闭包环境是在fn内。
修改下,把以上代码的eval换成window.eval,测试后发现各个浏览器中的表现不一样了。
IE6/7/8 : 仍然输出5,即没有修改全局变量x,修改的仍然是局部变量x
Firefox3.6.3/Safari4/Chrome6 dev/Opera10 : 输出10,修改的是全局变量x
测试IE9 Preview2,也是输出10,IE9开始向Firefox等靠拢了。
可以得出结论了,
IE6/7/8中,eval和window.eval一样,写在自定义函数内则是局部闭包,否则是全局闭包。
Firefox/Safari/Chrome/Opera/IE9中,eval同以上IE6/7/8,window.eval即使写在自定义函数内使用的也是全局闭包。
此外:IE中的window.execScript总是在全局闭包下执行,令人惊奇的是Chrome也支持该方法。呵,Chrome策略是标准,IE一个不能少。
相关文章推荐
- Js字符串转换成对象的方法-eval()
- js 把字符串当函数执行的方法
- 使用eval()方法可以实现动态执行js
- js 把字符串当做方法执行
- js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
- IE不执行js脚本的解决方法
- c#中实现类似js的Eval|.NET中执行Javascript(表达式是字符串的计算)
- js脚本三种实现字符串连接方法
- js脚本三种实现字符串连接方法
- js 把字符串当函数执行的方法
- 在java代码中执行js脚本,实现计算出字符串“(1+2)*(1+3)”的结果
- js 把字符串当函数执行的方法
- .NET中执行js脚本的方法
- js如何把字符串转为变量使用,以及js下将字符串当函数去执行的方法
- js解析字符串为json对象使用eval(str)方法
- js把字符串当函数执行的方法
- WebView中调用assets下的js脚本无法正常执行的解决方法
- Eval函数解决字符串JS在IE下不执行的问题
- System.Windows.Forms.WebBrowser中 处理 js 脚本 window.Open 禁止新建窗口 的方法