2012-03-16 93 views
1

我已經跋涉通過一些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

回答

7

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

2

那麼除非您提供密碼「swordfish」,否則警報箱會不斷彈出無限期的時間!

如果你遇到這樣的劇本,只是禁用JavaScript和查看源,搶密碼(請記下它),讓JS,再次運行該腳本並輸入密碼,看看有什麼等待;)

1

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

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

我敢肯定,這將是更加清晰,如果你代替'變種窗口=新(函數(){this.window =窗口;})()窗口;'。 – 2012-03-16 22:33:36