锁定老帖子 主题:window.eval 及相关方法总结
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-24
前面有帖子说到在函数里如何能在全局空间上eval
。 虽然此种需求在绝大多数情况下是不合理的,但是仍有极少数情况可能确实有需要。
【2008年7月6日更新:afcn0同志指出,根据https://bugzilla.mozilla.org/show_bug.cgi?id=382509
,该方法已经在1.8.1.13(Firefox 2.0.0.13)去除。】 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-09-24
不用那么麻烦,eval的context是保存的外面function的context,只要外面是window级别的就可以了
>>> function a(){var b=123;c=function(a){return eval(a)}} >>> a() >>> c("b") 123 >>> function a(){var b=123;c=new Function("a","return eval(a)")} >>> a() >>> c anonymous(a) >>> c("b") b is not defined [Break on this error] undefined javascript: with ... (line 1) >>> var b=234 >>> c("b") 234 先头的c是a里面的function,所以eval的scope是先c再a再window,第二次是用new Function所以直接把c弄到window下面,所以c的eval是先c再window,和a没关系了,execScript可能和这种new Function一样吧,不会产生scope链吧,并且好似execScript没有返回值 var b=234; function a(){var b=123;c=function(a){return execScript(a)}} a(); alert(c("alert(b);b")) |
|
返回顶楼 | |
发表时间:2007-09-24
正文更新完毕。
BTW,javaeye目前的编辑器在Opera下会使用WYSIWYG的编辑器,但是又不能正确的显示出来,算是个较严重的bug了。 |
|
返回顶楼 | |
发表时间:2007-11-02
对啊, 希望 Robbin 能够看到就好!
|
|
返回顶楼 | |
发表时间:2007-11-02
编辑器的问题修改起来在2.0的代码上面修改起来异常麻烦,但是3.0完全重写的代码已经解决了bug和浏览器兼容性问题。
BTW:我用的也是Opera |
|
返回顶楼 | |
浏览 7460 次