循环应该做什么?

问题描述:

我已经跋涉通过一些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!"); 

此代码不能真正使任何意义我。世界上发生了什么事情,它是如何工作的?

+1

看起来像死磕。 – mowwwalker 2012-03-16 22:04:05

+0

它说“循环直到密码是旗鱼”。 (创建一个while(true)循环的方法很长) – Joseph 2012-03-16 22:05:58

+2

'while(1 = 0)'?这不会马上破裂吗? – 2012-03-16 22:08:30

window总是等于window.window....window,所以循环将永远不会结束,除非密码是正确的。

一个for(;;)回路具有以下特征:

for (init; test; increment); 

它一直持续到test是假的。由于window === window总是真,循环继续运行,直到遇到break。为了澄清,w总是指window

+4

+1,但你不解释,我觉得OP是最有可能丢失,这是在HTML环境中,'window'是全局对象,所以所有的全局变量实际上是'窗口的属性部分'。例如,'window.alert'与'alert'相同,'window.window'和'window.window.window'都与'window'相同。 – ruakh 2012-03-16 22:05:42

+0

+1我正要编辑它,但后来我看到了您的出色评论。 – 2012-03-16 22:07:07

那么除非您提供密码“swordfish”,否则警报箱会不断弹出无限期的时间!

如果你遇到这样的剧本,只是禁用JavaScript和查看源,抢密码(请记下它),让JS,再次运行该脚本并输入密码,看看有什么等待;)

你需要看到前面的一行才能完全理解这段代码:

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

我敢肯定,这将是更加清晰,如果你代替'变种窗口=新(函数(){this.window =窗口;})()窗口;'。 – 2012-03-16 22:33:36