

**returnの仕方ついて**

以下の２つのコードの、◆箇所について考えています。

[code]

    【1】
        function rangeOfNumbers (start, end) {      
            if ( start === end) {   
                return [startNum];
            }else{  
                var answer = rangeOfNumbers(start, end - 1);
            　◆answer.push(end);
              ◆return answer;
            }   
        }
        rangeOfNumbers(5,8);        //(4) [5, 6, 7, 8]
    
[/code]

.

[code]

    【2】
       function rangeOfNumbers (start, end) {       
            if ( start === end) {   
                return [start];
            }else{  
                var answer = rangeOfNumbers(start, end - 1);
            　◆return answer.push(end);
            }   
        }
        rangeOfNumbers(5,8);
    
        /*Error VM2477:6 Uncaught TypeError: answer.push is not a function
            at rangeOfNumbers (<anonymous>:6:17)
            at rangeOfNumbers (<anonymous>:5:16)
            at <anonymous>:9:1*/
    
[/code]

**以下、質問です。**

【2】でエラーがでるのは、何故なのでしょうか。

お助けいただければ幸いです。  
どうぞよろしくお願いいたします。


CC BY-SA 4.0
2020-07-07T12:21:06.143
68370
2020-07-07T12:54:21.467
40891
question
javascript
returnの仕方ついて


answer.push は 配列に 項目を追加して その戻り値として 32ビットの整数を返します。  
[Array.push](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/push)

[code]

    return answer.push(end);
    
[/code]

は

[code]

    var length = answer.push(end);
    return length;
    
[/code]

と同じで 32ビット整数の値を返します。

そのため その関数の戻り値である 数字を

[code]

    var answer = rangeOfNumbers(start, end - 1);
    
[/code]

で `answer` に設定し

[code]

    answer.push(end);
    
[/code]

とすると

数字型には push 関数が存在しないため  
`push is not a function` というエラーが表示されています。


CC BY-SA 4.0
2020-07-07T12:54:02.137
68373
2020-07-07T12:54:02.137
18851
68370
answer