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