这个for-loop应该做什么?

时间:2012-03-16 22:00:59

标签: javascript loops for-loop

我一直在跋涉一些Javascript代码并遇到了这个循环

for (var w = window; w.window === window.window.window; w = w.window) {
    w.w = w.prompt("Enter password");
    if (w.w === "swordfish") break;
    w.alert("Incorrect password.");
}
w.alert("Welcome, authenticated user!");

这段代码对我来说没有任何意义。世界上到底发生了什么,它是如何运作的?

3 个答案:

答案 0 :(得分:7)

window始终等于window.window....window,因此循环永远不会结束,除非密码正确。

for(;;)循环具有以下签名:

for (init; test; increment);

它一直持续到test为假。由于window === window始终为true,因此循环会一直运行,直到遇到break为止。为澄清起见,w始终引用window

答案 1 :(得分:2)

除非您提供密码" 箭鱼"否则警报箱会无限期地弹出。 !

如果你遇到这样的脚本,只需禁用JavaScript并查看Source,获取密码(记下它),启用JS,再次运行脚本并输入密码以查看等待的内容;)

答案 2 :(得分:1)

您需要查看上一行才能完全理解此代码:

var window = (function () { return this; })();