Вот в чем дело ... вы не можете думать , что это HTML, но вот откуда исходит синтаксис.
Я поместил именно этот код в файл с именем test.js
, затем node test.js
:
100 bottles of beer on the wall.
The beer goes NaN
100 bottles of beer on the wall.
The beer goes NaN
100 bottles of beer on the wall.
The beer goes NaN
--- ad infinitum
Так что здесь происходит? А что там с синтаксисом? Похоже, в конце есть лишние скобки! Кроме того, { }
отсутствует, поэтому не следует вызывать вторую строку для каждой итерации! Правильно? Wrong .
Вот как выглядит источник:
for (let x = 100; 1^ <!-- x; x++)
console.log(`${x} bottles of beer on the wall.`);
console.log("The beer goes", x - <!-- (3, 5) % (
- "outputs"
* "fizz"
* "buzz"
* "fizzbuzz"
));
Теперь, это не совсем открыватель комментариев <!--
в HTML, который потребует закрытия -->
. Вместо того, чтобы трактовать это как /*
, JavaScript использует их как //
: они комментируют остаток от этой строки .
for (let x = 100; 1^ // x; x++)
console.log(`${x} bottles of beer on the wall.`);
console.log("The beer goes", x - // (3, 5) % (
- "outputs"
* "fizz"
* "buzz"
* "fizzbuzz"
));
Хм .. Это начинает иметь немного больше смысла. Давайте убьем комментарии и скорректируем новые строки:
for (let x = 100;
1^ console.log(`${x} bottles of beer on the wall.`);
console.log("The beer goes", x - - "outputs" * "fizz" * "buzz" * "fizzbuzz")
);
AHA! Теперь наш бесконечный цикл начинает обретать смысл. Условие завершения цикла всегда оценивает истину:
1^ console.log(`${x} bottles of beer on the wall.`);
Наш увеличивающийся «оператор» - это лог-сообщение с бессмысленным взятием вместо числа (т. Е. Причина, по которой он печатает NaN
):
console.log("The beer goes", x - - "outputs" * "fizz" * "buzz" * "fizzbuzz")
И тело цикла пустое:
for ( ...
);
Я не уверен, для чего предназначен этот код, но, по крайней мере, вы знаете, почему он делал именно то, что наблюдал, и почему он "работал".