Во многих браузерах, которые я тестировал, блоки 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
, которое мне не хватает? Мне очень нравится эта функция:)