以下是遇到的代码:
function popUp(URL) {
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "','....;");
}
我不明白为什么我们在这种情况下使用eval,似乎很多网站都提供这个作为打开弹出窗口的解决方案。我们为什么不简单地使用:
var win = window.open("...");
此代码的示例:
Check if popup window is already open
以及更多关于Google搜索结果
答案 0 :(得分:3)
因为原始开发人员不理解你可以使用window['page' + id]
来分配一个任意全局变量(没有var
意味着它上升到范围链,最终将它分配给全局对象,{浏览器中的{1}}。
这也是不好的做法,因为它根据时间(可能更简单window
)分配一个全局变量,它永远不会被再次引用(至少在这个例子中)。
即使它被引用,它也应该返回一个引用,而不仅仅是一个引用。该函数应该封装其状态,而不是分配一堆全局变量。
我对使用时间的猜测是没有两个窗口有相同的参考(理论上,不能保证,谢谢RobG)。
答案 1 :(得分:1)
eval
唯一的区别是设置了一个任意变量......你无法再次引用它。我不知道为什么有正确思想的人会建议将其作为打开窗口的解决方案,因为你的第二段代码展示了“正确”的方式。