質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

312閲覧

node.jsにて。 ガベージコレクション

tamanegee777

総合スコア10

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/06/04 14:54

前提・実現したいこと

node.jsにて。
ガベージコレクションが
関係しているらしいですが
なぜ結果が0になるのか?
具体的な仕組みが知りたいです

該当のソースコード

node.js

1var retInteger = function(){ 2 var i = 0; 3 return i++; 4} 5 6retInteger(); //0 7retInteger(); //0 8retInteger(); //0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

答えがでていますし、質問の意図とも異なりますが、前置と後置の挙動についてのサンプルコードです。参考までに。

javascript

1var retInteger = function(){ 2 var i = 0; 3 return ++i; 4} 5 6retInteger(); //1 7retInteger(); //1 8retInteger(); //1

投稿2018/06/05 03:42

jnst

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ガベージコレクションというか、変数のスコープの話ですかね?

javascript

1var retInteger = function(){ 2 var i = 0; 3 return i++; 4}

このiretIntegerが実行されるときに初期化され、完了時に破棄されます。なので呼び出すごとに

  • var i =0 0で初期化
  • return i++ で0を戻してから++が処理されて1に変更(i++`は値を戻してから加算処理される)
  • 関数が処理終了したので破棄

という形になっているので何度呼び出しても0になります。

var i = 0; var retInteger = function(){ return i++; }

とかだと呼び出すごとに増えていきますね。

投稿2018/06/04 14:58

denzow

総合スコア640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamanegee777

2018/06/04 15:16

ありがとうございます 破棄されるのならばundefinedかと思う のですが...
denzow

2018/06/04 23:23

`retrun`してますので、そこまでは関数は破棄されていませんよ。表示されているのは`i`という変数ではなく、iという変数に代入された0という値を関数を呼び出した側が受け取ってますので、その後iが破棄されたとしても影響はありません。
tamanegee777

2018/06/04 23:43

あ! わかりました! ありがとうございます!
guest

0

こんなのもあります。いいとか悪いとかは別として
仕組みを理解する上では良いコードだと思います。

javascript

1var retInteger = (function () { 2 var i = 0; 3 4 return function () { 5 i++; 6 return i; 7 }; 8}()); 9 10retInteger(); //1 11retInteger(); //2 12retInteger(); //3

投稿2018/06/05 01:57

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問