在我学习和改进我的JavaScript的过程中,我遇到了一个带有switch/case语句的脚本,我注意到一些变量在++之前使用带有变量的++递增,然后一些变量在变量之后有++.这些有什么区别?这是我试图解释m和y变量的一个例子.
switch(f){
case 0:{
++m;
if(m==12){
m=0;
y++;
}
break;
}
case 1:{
--m;
if(m==-1){
m=11;
y--;
}
break;
}
case 2:{
++y;
break;
}
case 3:{
--y;
break;
}
case 4:{
break;
}
}
Run Code Online (Sandbox Code Playgroud) 在我测试过的很多浏览器中,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我丢失的情况下使用块的结果值?我真的很喜欢这个功能:)