Использование возвращаемого значения блока в JavaScript

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

14
задан Ry- 23 December 2011 в 16:21
поделиться