

JavaScript初心者です。  
下のようなコードがあった場合、`var d`の値が "a function" になる理由を教えていただきたいです。

[code]

    function outer(X,Y){
        var a = 1;
        var inner = function(b){
            var c = X+Y;
            return c+1;
        }
        return inner;
    }
    var d = outer(2,3);
    
[/code]


CC BY-SA 4.0
2020-01-22T17:44:50.893
62466
2020-01-24T01:45:03.743
2020-01-24T01:45:03.743
3060
36172
question
javascript
Javascript Functionについて


プログラムの挙動を追うと、関数 `outer` の中で変数 `inner` に関数値を代入してそれを `return` しており、変数 `d` には
`outer`
の返り値が代入されているから……、としか言えません。これ以上の明確なアドバイスをするには、質問者さんがどのように誤解されているのか、どこに引っかかってらっしゃるのか、今どのあたりがおかしいと思われているのかを教えてもらうことになりそうです（質問文にそのあたりのことが書かれていると回答を書きやすいです）。

ひとつよくある誤解として、関数 `f` そのものと、関数呼び出しの構文 `f(42)` を区別できていないというものがあるので、これについて説明します。

[code]

    var inner = function(b){
        var c = X+Y;
        return c+1;
    };
    
[/code]

この部分において `inner`
には名前が無い関数そのものが代入されており、関数を呼び出した結果を代入しているわけではありません。呼び出した結果を代入するのであればたとえば次のように書きます。

[code]

    var inner = (function(b){
        var c = X+Y;
        return c+1;
    })(42);
    
[/code]

また、この部分において：

[code]

    var d = outer(2, 3);
    
[/code]

この行は関数 `outer`
に引数を与えているのであり、返ってきた関数値に引数を与えているのではありません。帰ってきた関数値に引数を与えるのであればたとえば次のように書きます。

[code]

    var d = (outer(2, 3))(42);
    
[/code]


CC BY-SA 4.0
2020-01-22T23:28:10.617
62469
2020-01-23T12:33:18.993
2020-01-23T12:33:18.993
19110
19110
62466
answer