循环应该做什么?
我已经跋涉通过一些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!");
此代码不能真正使任何意义我。世界上发生了什么事情,它是如何工作的?
window
总是等于window.window....window
,所以循环将永远不会结束,除非密码是正确的。
一个for(;;)
回路具有以下特征:
for (init; test; increment);
它一直持续到test
是假的。由于window === window
总是真,循环继续运行,直到遇到break
。为了澄清,w
总是指window
。
+1,但你不解释,我觉得OP是最有可能丢失,这是在HTML环境中,'window'是全局对象,所以所有的全局变量实际上是'窗口的属性部分'。例如,'window.alert'与'alert'相同,'window.window'和'window.window.window'都与'window'相同。 – ruakh 2012-03-16 22:05:42
+1我正要编辑它,但后来我看到了您的出色评论。 – 2012-03-16 22:07:07
那么除非您提供密码“swordfish”,否则警报箱会不断弹出无限期的时间!
如果你遇到这样的剧本,只是禁用JavaScript和查看源,抢密码(请记下它),让JS,再次运行该脚本并输入密码,看看有什么等待;)
你需要看到前面的一行才能完全理解这段代码:
var window = (function() { return this; })();
我敢肯定,这将是更加清晰,如果你代替'变种窗口=新(函数(){this.window =窗口;})()窗口;'。 – 2012-03-16 22:33:36
看起来像死磕。 – mowwwalker 2012-03-16 22:04:05
它说“循环直到密码是旗鱼”。 (创建一个while(true)循环的方法很长) – Joseph 2012-03-16 22:05:58
'while(1 = 0)'?这不会马上破裂吗? – 2012-03-16 22:08:30