41163


javascriptの勉強をしており、書籍を見ていると、下のようなパターンのコードがでてきます。  
関数の中に関数があるパターンです。

[code]

    function counter(){
        var n = 0;
        return{
            count: function(){return n++;},
            reset: function(){n = 0;}
        };
    }
    var c = counter(), d = counter();
    console.log(c.count());//0
    console.log(c.count());//1
    
[/code]

こちらのコードのcountメソッドを呼び出すと最初になぜか0になります。  
n++としているので最初に呼び出しときに1になるのでは？と思ってしまいます。  
なぜ0になるのか教えていただけますでしょうか。


CC BY-SA 3.0
2018-01-23T16:39:13.817
41161
2018-01-23T17:44:05.330
26076
question
javascript
javascriptの戻り値でn++としたときにはじめにゼロになる理由がわからない。


インクリメント演算子で`n++`と書いたときに加算前の値が返されるのは、JavaScriptの仕様です。  
加算した後の値を参照したい場合、`++n`と書く必要があります。

* * *

算術演算子 - JavaScript | MDN  
<https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88_()>

>   * オペランドの後に演算子を置く（例：x++）後置記法で使った場合、加算する前の値を返します。
>

[code]

    var n = 0;
    console.log(n++);
    console.log(n);
[/code]

>   * オペランドの前に演算子を置く（例：++x）前置記法で使った場合、加算した後の値を返します。
>

[code]

    var n = 0;
    console.log(++n);
    console.log(n);
[/code]


CC BY-SA 3.0
2018-01-23T17:44:05.330
41163
2018-01-23T17:44:05.330
3068
41161
answer