Странность при вычислении выражений.. Это баг или фича?
Почему
[function(){alert(123)}][0]() вываливается с ошибкой, а a = [function(){alert(123)}][0]() работает? Проверял под Firefox и Opera - результат одинаков. |
Ни то, ни другое не вываливается.
|
Да, вы правы, дело оказалось немного в другом:
// не работает fun = function(){} fun() [function(){alert(123)}][0]() // работает fun = function(){} fun(); [function(){alert(123)}][0]() |
здесь был пост не приносящий пользу
|
rkwvd,
Это не странность, так и должно быть. Точка с запятой после некоторых выражений обязательна, потому что не всегда интерпретатор будет автоматически вставлять её после (или до) выражений. Ваше первое выражение для интерпретатора выглядит так: fun = function(){}; fun()[function(){alert(123)}][0](); // перенос не рассматривается, автоматически точка с запятой не вставлена. Очевидно, что произойдет ошибка. |
Но ошибка не происходит.
|
Kolyaj,
Как это? Происходит, вот: try { fun = function(){} fun() [function(){alert(123)}][0]() } catch(e) { alert(e); // Type Error: fun() is undefined } Такой текст ошибки, как я понимаю, из-за того, что результат fun() является не массивом (как ожидает конструкция), а undefined, из-за этого происходит ошибка типа. |
Ага, а просто в консоль не вываливается.
|
Kolyaj,
У меня вываливалась. Правда на страницах нашего форума у меня FireBug вообще не работает, пишет в консоли: Цитата:
|
У меня тоже фаербаг че-та глючит.
|
Часовой пояс GMT +3, время: 05:07. |