Почему можно вызвать функцию в JavaScript следующим образом, протестировано с помощью node.js:
~$ node
> function hi() { console.log("Hello, World!"); };
undefined
> hi
[Function: hi]
> hi()
Hello, World!
undefined
> hi)( // WTF?
Hello, World!
undefined
>
Почему последний звонок hi)(
, работает? Это ошибка в node.js, ошибка в движке V8, официально неопределенное поведение или действительно допустимый JavaScript для всех интерпретаторов?
javascript
node.js
syntax
Хайд
источник
источник
.js
будут вызывать синтаксическую ошибкуperl -ne '$x += $_; }{ print $x'
. См. Скрытые возможности PerlОтветы:
Кажется, что это ошибка Node REPL, размещение этих двух строк
.js
вызовет синтаксическую ошибку.Ошибка:
Выпуск № 6634 .
Воспроизведено v0.10.20.
В v0.11.7 это исправлено.
источник
function a)arg1, arg2( } ]arg2 + arg1[ return; {
должен быть правильный синтаксис?npm
естьinstall
иisntall
. держу пари, что вы не заметили :)Это связано с тем, как REPL оценивает входные данные, которые в конечном итоге таковы:
Добавлены дополнительные скобки, чтобы заставить его быть выражением :
Цель состоит в том, чтобы рассматривать
{...}
какObject
литералы / инициализаторы, а не как блок .И, как упомянул leesei, это было изменено для 0.11.x, который будет просто
{ ... }
переносить, а не все входные данные:источник
hi)(arg
будет работать? Это может быть использовано для написания действительно написанного на WTF кода ;-)hi)(arg
становится(hi)(arg)
- ничто не имеет себе равныхБыла ошибка, поднятая 4 месяца назад, для этой проблемы https://github.com/joyent/node/issues/5698
И проблема была в том, что REPL заключает в себе заявления с паренами. Так
становится
Актуальное объяснение можно найти здесь https://github.com/joyent/node/issues/5698#issuecomment-19487718 .
источник