锁定老帖子 主题:eval与window.eval的差别
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-21
最后修改:2010-09-15
它们之间有区别吗?开发过程中似乎很少有人去加个额外的window,觉得多此一举。比如ajax过程中回调函数解析json格式字符串:
... function callback(str){ var json = eval('(' + str + ')'); } ...
通常直接使用eval,而非var json = window.eval('(' + str + ')');
var x = 5; function fn(){ var x = 'jack'; eval('x=10;'); } fn(); alert(x); // -->5
所有浏览器中输出的都是5,说明调用fn后eval修改的是fn内的局部变量x,而非全局的x。即eval执行的闭包环境是在fn内。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-21
真还没注意这种差异。
不过现在都不建议用eval了,解析JSON,可以用这个 function jsonDecode(data){ return (new Function("return " + data))(); } 其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data; jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。 |
|
返回顶楼 | |
发表时间:2010-05-22
fyland 写道 真还没注意这种差异。
不过现在都不建议用eval了,解析JSON,可以用这个 function jsonDecode(data){ return (new Function("return " + data))(); } 其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data; jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。 不错 |
|
返回顶楼 | |
发表时间:2010-05-22
强人啊,这都能发现..
|
|
返回顶楼 | |
发表时间:2010-05-23
这个……学习了。。。
一直以为eval很好用,原来还有这等道理。。 拿来用了! function jsonDecode(data){ return (new Function("return " + data))(); } 哈哈~强大啊! |
|
返回顶楼 | |
发表时间:2010-05-24
function jsonDecode(data){
return (new Function("return " + data))(); } 领教了..... |
|
返回顶楼 | |
发表时间:2010-05-24
fyland 写道 真还没注意这种差异。
不过现在都不建议用eval了,解析JSON,可以用这个 function jsonDecode(data){ return (new Function("return " + data))(); } 其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data; jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。 最好加个分号 return (new Function("return " + data + ";"))(); or: return (new Function("return " + data + ";")).call(arguments.callee); |
|
返回顶楼 | |
发表时间:2010-05-25
chemzqm 写道 强人啊,这都能发现..
同感! 平时还真没注意加window.与不加之间到底有什么区别,许多教材上也是说只是书写上的省略,却不知各浏览器厂商都有自己的一套处理策略。哎!何时才能有一个标准产物啊。 |
|
返回顶楼 | |
发表时间:2010-05-25
给自己找事做, 变量命名非得弄得有冲突吗?
|
|
返回顶楼 | |
发表时间:2010-05-26
LZ很有研究精神啊
|
|
返回顶楼 | |