我一直在跋涉一些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!");
这段代码对我来说没有任何意义。世界上到底发生了什么,它是如何运作的?
答案 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; })();