为什么我不能从这两个代码块中得到相同的结果?

时间:2012-10-11 10:00:36

标签: javascript

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

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 + "#");

}

另外我不知道该怎么称呼这些块,表达式也许?感谢先进的帮助。

3 个答案:

答案 0 :(得分:1)

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

第二块可能是:

var NumSym = "";

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

}

理解表达的概念。主题'表达式和运算符'和'语句'的 See here

答案 1 :(得分:1)

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

line = line + "#";

而在第二个for - 循环中,你没有:

print(NumSym + "#");

在第二行中,您打印当前值NumSym''),并为其添加一个#,因此它将打印十{{1} }}。换句话说:#的值永远不会改变。
顺便说一句,在JS中,人们普遍认为,以“UpperCase”字母开头的“things”是对象构造函数,变量从小写字母开始。只是你知道......

因为我注意到你在评论中曾多次问过这个问题:

声明是代码的“行”,“1件或更多东西”

NumSym

表达式是声明中有意义的部分:

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

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

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)

输出:

  

在循环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中的情况,这就是为什么我将代码示例称为循环而不是块。只是因为我认为应该屏蔽阻止操作在块本身之外声明的变量。但我认为这更像是个人的事情。

答案 2 :(得分:0)

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

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

为了使它等同于第一个块,你可以使用类似的东西:

var NumSym = "";
for (i = 0; i < 10; i++) {
    NumSym = NumSym + "#";
    print(NumSym);
}