0

我想知道为什么我没有从这两个代码块中得到相同的结果。

var line = "";
var counter = 0;
while (counter < 10) {
  line = line + "#";
  print(line);
  counter = counter + 1;
}

-

var NumSym = "";

for(i = 0; i < 10; i++){

print(NumSym + "#");

}

另外我不确定这些块的名称,也许是表达式?感谢您的帮助。

4

3 回答 3

1

在第二个块中,您没有将值存储在变量中,因此字符串连接将不起作用。所以每次都会显示一个#号。

第二块可能是:

var NumSym = "";

  for(i = 0; i < 10; i++){
    NumSym = NumSym + "#"
    console.log(NumSym);

}

理解表达式的概念。有关“表达式和运算符”和“语句”的主题,请参见此处

于 2012-10-11T10:03:35.770 回答
1

在第一个while-loop示例中,您在每次迭代时将附加哈希 ( #) 连接到line字符串常量:

line = line + "#";

而在第二个for循环中,您不会:

print(NumSym + "#");

在第二行中,您打印NumSym(即'') 的当前值,并在其中添加一个#,因此它会打印出 10 #。换句话说: 的值NumSym永远不会改变。
顺便说一句:在 JS 中,普遍认为以大写字母开头的“事物”是对象构造函数,变量以小写字母开头。只是让你知道...

因为我注意到你在评论中问了几次这个问题:

语句是“1 或多个事物”的“行”代码:

var foo;//stmt declaring a variable, called foo (implicitly initialized to undefined)
var foo = 'bar';//stmt declares AND assigns a string constant to the variable
var foo, bar, x = 1;//statement, consisting of 4 expressions

表达式是语句中有意义的部分:

var result = 2*123;//where 2*123 is an expression, result = 2*123 is, too
while(result > 123)//while([expression])<-- an expression resolves in a value (true or false)

块在 JS 中有些模糊,基本上所有用 curly 包裹的代码都可以称为块,但这可能会让那些习惯于 C++ 等语言的人感到困惑,其中每个块都有自己的范围。

int x = 0;//global
int main()
{
    int x = ::x;//function scope
    for (int x=0;x<10;x++)
    {//x == loop scope, ::x == global x
        printf("In loop x: %d, outer x: %d\n",x, ::x);
        ::x = x%2 == 0 ? x : ::x;
    }
    if (x == 0)
    {
        printf("true\n");//will show up on the screen!
    }
    return x;
}

输出:

循环内 x:0,外部 x:0
循环内 x:1,外部 x:0
循环内 x:2,外部 x:0
循环内 x:3,外部 x:2
循环内 x:4,外部 x:2
循环内 x:5,外部 x:4
循环内 x:6,外部 x:4
循环内 x:7,外部 x:6
循环内 x:8,外部 x:6
循环内 x:9,外部 x:8
真的

在 JS 中情况并非如此,这就是为什么我将您的代码示例称为循环而不是块。仅仅是因为我觉得一个应该屏蔽阻止对在块本身之外声明的变量的操作。但我认为这更像是个人的事情。

于 2012-10-11T10:06:19.743 回答
0

在第二个例子中,你总是打印出NumSym(它总是空字符串,因为你永远不会改变它的初始值)加上一个#字符。

换句话说,一系列行,每行包含一个#.

要使其与第一个块等效,您可以使用以下内容:

var NumSym = "";
for (i = 0; i < 10; i++) {
    NumSym = NumSym + "#";
    print(NumSym);
}
于 2012-10-11T10:04:53.353 回答