Во многих браузерах, которые я тестировал, блоки JavaScript действительно возвращают значение. Вы можете проверить это на любой консоли:
for(var i = 0; i < 10; i++) {
var sqrt = Math.sqrt(i);
if(Math.floor(sqrt) === sqrt) {
i;
}
}
Возвращаемое значение - это последнее квадратное число, то есть 9! Но так как это не выражение, я полагаю, вы не можете сделать это:
for(var i = 0; i < 10; i++) {
...
} + 5
Это не работает. Конечно, он дает + 5
или 5
, потому что это отдельное утверждение. Поместить цикл в круглые скобки, очевидно, не удается, а если блок находится в круглых скобках (например, ({f(); r})
- не работает), он обрабатывается как объект и выдает синтаксическую ошибку.
Одним из способов использования возвращаемого значения, как такового, является использование eval
:
eval('for(var i = 0; i < 10; i++) {var sqrt = Math.sqrt(i);if(Math.floor(sqrt) === sqrt) {i;}}') + 5; // 14
Но я, очевидно, не собираюсь использовать это, если eval
- единственное решение. Есть ли способ использовать результирующее значение блока без использования eval
, который я пропускаю? Мне очень нравится эта функция:)