0

私が理解するように導かれた限り、x++本質的にはより簡潔な言い方x = x + 1です。これまでのところ、とても明確です。フロントエンドのJavascriptで、時々見たことがあります— jsPerf++xテストから、これが特定のバージョンのIEでパフォーマンス上のわずかな利点を持っていることを(1つのGoogleが効果的にどのように)見つけられなくなったことを覚えているようです。それで行きます。++

しかし、私は最近、実行順序(JSコード)の奇妙な癖について話す何かに遭遇しました:

var x = 1;
console.log(x++); // 1 (?!)
console.log(x);   // 2

…一方

var x = 1;
console.log(++x); // 2 (what I would've expected)
console.log(x);   // 2

私はこれに頭を悩ませることができません。操作と割り当てが括弧内にある場合、変更されていない変数をどのように返すことができますか?したがって、console.log実行されて返されることは言うまでもなく、呼び出される前にすべての権限を実行する必要がありますか?

4

4 に答える 4

5

それらは2つの異なるものです

x++

ポストインクリメントです。変更前に戻りますxが、変更します。

tmp = x;
x = x+1;
return tmp;

一方

++x

プリインクリメントです。最初に変更xし、その後新しい値を返します。

x = x+1;
return x;

2つ目も、コンパイラー/インタープリターが一時変数を作成してデータをコピーする必要がないため、わずかに高速です。

于 2012-12-13T16:25:59.447 に答える
2

x++値を取得し、それをインクリメントします。

++x値をインクリメントしてから取得します。

これは、これらの演算子をサポートする、私が使用したすべての言語での動作です。

于 2012-12-13T16:25:52.120 に答える
1

++ AFTERを使用すると、変数はそのコード行の後に値をインクリメントします。

同様に、++ BEFORE変数を使用すると、そのコード行で使用する前に値がインクリメントされます。

かっこいい?

var x = 1;
x++;
console.log(x++); // 2 (?!)
console.log(x);   // 3
console.log(++x); // 4
console.log(x++); // 4
console.log(x);   // 5
于 2012-12-13T16:25:44.680 に答える
1

インクリメント前とインクリメント後の 演算子の違いについて話しています。前の場合、操作は基本的(x = x + 1; yield x)にであり、2番目の場合は(yield x; x = x + 1)です。

于 2012-12-13T16:25:58.667 に答える