0

これらの2つのコードブロックから同じ結果が得られないのはなぜだろうと思います。

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

2 番目のブロックでは、変数に値を格納していないため、文字列の連結は機能しません。そのため、毎回単一の # 記号が表示されます。

2 番目のブロックは次のようになります。

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

一方、2 番目のループでは、次forのことは行いません。

print(NumSym + "#");

2 行目では、現在の値NumSym(つまり'') を出力し、それにシングル#を追加すると、 ten が出力されます#。つまり、 の値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

2 番目の例でNumSymは、常に (初期値から変更していないため、常に空の文字列です) プラス 1#文字を出力しています。

言い換えれば、それぞれが 1 つを含む一連の行#です。

最初のブロックと同等にするには、次のようなものを使用します。

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