1

私はいくつかのさまざまなJavaScriptテクニック、つまり関数プロパティを練習しています。これが私の頭を少し引っ掻くようなものです。

//property of the q0 function
q0.unique = 0;


function q0() {

return q0.unique++;

}

console.log(q0()); //returns 0 
console.log(q0()); //returns 1
console.log(q0()); //returns 2
console.log(q0()); //returns 3

関数への最初の呼び出しは1を返すべきではありませんか?なぜ0を返すのですか?q0.uniqueはすでに0に設定されていますか?

4

4 に答える 4

3

あなたのコードが次の場合、それは真実です:

function q0() {

return ++q0.unique;

}

接尾辞++は現在の値を返し、その後増分します。接頭辞を付ける++と、その逆になります。

于 2012-11-19T21:10:51.437 に答える
2

後置インクリメント演算子は、インクリメント前の値を返します。

var a = 0;
var b = a++;
// now a==1 and b==0

それを思い出す最良の方法は、a++として読むことgive the value and then incrementです。

増分後に値を返したい場合は、次を使用します。

return ++q0.unique;

参照

于 2012-11-19T21:11:17.433 に答える
1

インクリメント前とインクリメント後を混同しています。与えられた:

var unique = 0;

var x = unique++()の現在の値を割り当て、インクリメント後( )の値を割り当てます。どちらの場合も、の値は結局のところです。unique0var x = ++uniqueunique1unique1

あなたが欲しいものは:

function q0() {
  return ++q0.unique;
}
于 2012-11-19T21:11:18.557 に答える
1

2つのインクリメント演算子があります。

var++ // increment  the variable ---after--- the operation.  
++var // increment  the variable ---before-- the operation.

例:

var x = 0;

alert(x++) // 0
alert(x)   // 1
alert(++x) // 2
于 2012-11-19T21:12:26.793 に答える