在我测试过的很多浏览器中,JavaScript块实际上返回了一个值.您可以在任何控制台中测试它:
for(var i = 0; i < 10; i++) {
var sqrt = Math.sqrt(i);
if(Math.floor(sqrt) === sqrt) {
i;
}
}
Run Code Online (Sandbox Code Playgroud)
"返回"值是最后一个方格数,即9!但是因为它不是我想的表达,你不能这样做:
for(var i = 0; i < 10; i++) {
...
} + 5
Run Code Online (Sandbox Code Playgroud)
这不起作用.它给出了+ 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
Run Code Online (Sandbox Code Playgroud)
但我显然不会想要使用它,如果eval是唯一的解决方案.有没有办法在不使用eval我丢失的情况下使用块的结果值?我真的很喜欢这个功能:)