我正在查看以下代码,其中for循环没有括号。我很难弄清楚它应该如何运作。我来自C#,Java和一些C ++的背景。所有这些语言都比关于括号使用的javascript更严格。
function StupidMesh(volume, dims) {
var vertices = [], faces = [], x = [0,0,0], n = 0;
for(x[2]=0; x[2]<dims[2]; ++x[2])
for(x[1]=0; x[1]<dims[1]; ++x[1])
for(x[0]=0; x[0]<dims[0]; ++x[0], ++n)
if(!!volume[n]) {
for(var d=0; d<3; ++d) {
var t = [x[0], x[1], x[2]]
, u = [0,0,0]
, v = [0,0,0];
u[(d+1)%3] = 1;
v[(d+2)%3] = 1;
for(var s=0; s<2; ++s) {
t[d] = x[d] + s;
var tmp = u;
u = v;
v = tmp;
var vertex_count = vertices.length;
vertices.push([t[0], t[1], t[2] ]);
vertices.push([t[0]+u[0], t[1]+u[1], t[2]+u[2] ]);
vertices.push([t[0]+u[0]+v[0], t[1]+u[1]+v[1], t[2]+u[2]+v[2]]);
vertices.push([t[0] +v[0], t[1] +v[1], t[2] +v[2]]);
faces.push([vertex_count, vertex_count+1, vertex_count+2, vertex_count+3, volume[n]]);
}
}
}
return { vertices:vertices, faces:faces };
}
答案 0 :(得分:2)
如果loop
或if block
只有一个语句,我们可以随时删除括号。
所以解释下面的代码:
for (x[2] = 0; x[2] < dims[2]; ++x[2]) //There will be only one statement which is the next for loop
for (x[1] = 0; x[1] < dims[1]; ++x[1]) //There will be only one statement which is the next for loop
for (x[0] = 0; x[0] < dims[0]; ++x[0], ++n) //There will be only one statement which is the if statement
if (!!volume[n]) { //There will be multiple statements, so we use brackets
for (var d = 0; d < 3; ++d) {
var t = [x[0], x[1], x[2]],
u = [0, 0, 0],
v = [0, 0, 0];
u[(d + 1) % 3] = 1;
v[(d + 2) % 3] = 1;
for (var s = 0; s < 2; ++s) {
t[d] = x[d] + s;
var tmp = u;
u = v;
v = tmp;
var vertex_count = vertices.length;
vertices.push([t[0], t[1], t[2]]);
vertices.push([t[0] + u[0], t[1] + u[1], t[2] + u[2]]);
vertices.push([t[0] + u[0] + v[0], t[1] + u[1] + v[1], t[2] + u[2] + v[2]]);
vertices.push([t[0] + v[0], t[1] + v[1], t[2] + v[2]]);
faces.push([vertex_count, vertex_count + 1, vertex_count + 2, vertex_count + 3, volume[n]]);
}
}
}
这是因为每个for
和if
块在这里被视为一行语句。
答案 1 :(得分:0)
语法如下:
while (expression) do statement
语句必须简单,但如果要执行多个语句,则应使用花括号:{}
。在这种情况下,语句被组合在一起,从语法的角度来看,它们被视为一个语句:
while (smthIsTrue) {
console.log("hi!");
console.log("there're many statements grouped with {}");
}
对于......甚至if-statement:
这样的陈述也是如此if (smthIsTrue) {
statement1;
statement2;
...
statementN;
}
我建议您仔细选择使用或不使用{}
的时间和原因。当您明确使用{}
时,可以避免一些错误。
看:
if (smthIsTrue)
sayHello();
informUsers();
informUsers();
无论如何都会运行,即使你假设它运行如果smthIsTrue == true。为什么?没有花括号,只执行下一个语句:sayHello();
以下代码也适用! if(expression) ;
;
这是一个空语句,所以js看起来是正确的。但是,其他人如何理解你是犯了错误还是特意将这段代码放在某个地方?最好的方法是评论这样一个地方,以便没有任何其他方式来理解代码:
if (youCanDoNothing) /* There shouldn't be anything, please dont' treat it as a mistake */;
以这种方式,如果你在编写代码后的某段时间内查看代码,你就没有机会忘记你特意提到了某些代码。