我想知道为什么我从这两个代码块中得不到相同的结果。
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 + "#");
}
另外我不知道该怎么称呼这些块,表达式也许?感谢先进的帮助。
答案 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);
}