2012-03-16 8 views
1

は、私はこのコードは本当に私にはどんな意味がありません。このループfor-loopとは何でしょうか?

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!"); 

をいくつかのJavascriptのコードを重そうに歩くと遭遇してきました。世界では何が起こっているのですか?それはどのように機能しますか?

+1

死のように見えます。 – mowwwalker

+0

「パスワードがswordfishであるまでループする」と言っています。 (while(true)ループを作成するにはどうすればよいでしょうか) – Joseph

+2

'while(1 = 0)'?それはすぐに壊れないだろうか? –

答えて

7

windowは常にwindow.window....windowに等しいので、パスワードが正しい場合を除き、ループは決して終了しません。

for(;;)ループのシグネチャは次のとおりです。testがfalseになるまで

for (init; test; increment); 

それは継続し続けます。 window === windowは常にtrueであるため、ループは実行され続け、breakになります。明確化のために、wは常にwindowを指します。

+4

+1ですが、あなたは、OPが欠けている可能性が最も高いと思われる部分を説明していません。これはHTML環境では 'window'がグローバルオブジェクトなので、すべてのグローバル変数は' window '。例えば、 'window.alert'は' alert'と同じで、 'window.window'と' window.window.window'は 'window'と同じです。 – ruakh

+0

+1私はそれを編集しようとしていましたが、あなたの素晴らしいコメントを見ました。 –

2

パスワード「swordfish」を指定しない限り、警告ボックスは無期限にポップアップし続けます。あなたは、このようなスクリプトが発生した場合は、ちょうどJSを有効にするには、JavaScriptを無効にして、ソースを表示し、(それをメモしておいてください)パスワードをつかむ、もう一度スクリプトを実行して待ってものを見るためにパスワードを入力し

;)

1

このコードを完全に理解するには、上記の行を参照する必要があります。

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

代わりに 'var window = new(function(){this.window = window;})()。window;'を使ったほうがはるかに明確になるでしょう。 –

関連する問題