Во многих браузерах, которые я тестировал, блоки JavaScript фактически возвращают значение. Вы можете протестировать его на любой консоли:
for(var i = 0; i < 10; i++) {
var sqrt = Math.sqrt(i);
if(Math.floor(sqrt) === sqrt) {
i;
}
}
Значение "return" - это последнее квадратное число, то есть 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, которое мне не хватает? Мне очень нравится эта функция:)