Что должен делать этот цикл for? - PullRequest
1 голос
/ 17 марта 2012

Я пробирался через некоторый код 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!");

Этот код не имеет никакого смысла для меня. Что в мире здесь происходит и как это работает?

Ответы [ 3 ]

7 голосов
/ 17 марта 2012

window всегда равно window.window....window, поэтому цикл никогда не закончится, если пароль не правильный.

Цикл for(;;) имеет следующую подпись:

for (init; test; increment);

Это продолжается до тех пор, пока test не станет ложным.Поскольку window === window всегда истинно, цикл продолжает работать, пока не встретится break.Для пояснения w всегда относится к window.

2 голосов
/ 17 марта 2012

Хорошо, окно предупреждения продолжает появляться в течение неопределенного периода времени, если вы не введете пароль " меч-рыба "!

Если вы столкнулись с таким сценарием, просто отключите JavaScript и просмотрите источник, захватите пароль (запишите его), включите JS, снова запустите сценарий и введите пароль, чтобы увидеть, что ожидает;)

1 голос
/ 17 марта 2012

Вам необходимо увидеть предыдущую строку, чтобы полностью понять этот код:

var window = (function () { return this; })();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...