2017-11-17 12 views
2

:それは11の代わりに10を記録しなかった理由機能プロパティの例を説明

function makeCounter() { 
    function counter() { 
    return counter.count++; 
    }; 
    counter.count = 0; 

    return counter; 
} 

let counter = makeCounter(); 
counter.count = 10; 
console.log(counter()) // logs 10 

私は理解していない何がありますか? countプロパティを10に設定し、countプロパティをインクリメントするfunction counterを格納した場合、プロパティが11にインクリメントされないのはなぜですか?

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_() – Andreas

+0

'counter.count'印刷 '11' – gurvinder372

+0

'カウンタ() '意志10を記録するが、counter.countは '11'を記録する。 '++ 'インクリメントは、値が返された後に発生します。これを前にしたいなら、 'return ++ counter.count'を書くことができます。 – skyline3000

答えて

3

あなたがうまく機能特性を理解しています。これは、++の仕組みと関係があります。

return counter.count++;は、現在の値でを返します。それ以降は、それを増やします。

+0

ありがとう、それは単純なものだったことを知らなかった。 – Leff

0

接尾辞増分演算子を使用しています。増分演算子は、最初に現在の値を戻し、増やします。あなたはプレフィックス増加にそれを変えることができる:

return ++counter.count; 
-1

あなたの機能makeCounter[[scope]]へのアクセス権を持っている機能を、返しています。それはclosureを使用しています。それはそれがそのように動作することは明らかです。

閉鎖:「関数は、彼が呼び出された場所からデータを記憶」。

さらなる情報。 What is a 'Closure'?

+0

私はあなたが実際の質問を逃したと思っています。 – epascarello

関連する問題