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

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

新規登録して質問してみよう
ただいま回答率
85.35%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

740閲覧

JavaScriptの変数の性質について分からないことがあります

Bell.T

総合スコア1

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/12/01 01:45

編集2021/12/01 01:59

疑問点

以下のようなJavaScriptコードを動作させました。

JavaScript

1function test_func1(x){ 2 x[0] += 1; 3 return x; 4} 5 6function test_func2(x){ 7 x[0].melon += 1; 8 return x; 9} 10 11function test_print(){ 12 let a = [0, 1]; 13 let b = [{melon:0, apple:0}, {melon:0, apple:1}]; 14 console.log(a); // [0, 1]が出力される 15 console.log(b); // [{melon:1, apple:0}, {melon:0, apple:1}]が出力される(なぜ?) 16 a = test_func1(a); 17 b = test_func2(b); 18 console.log(a); // [1, 1]が出力される 19 console.log(b); // [{melon:1, apple:0}, {melon:0, apple:1}]が出力される 20} 21 22test_print(); 23

関数test_func2を通過した後の**console.log(b)のmelonが1になるのは分かるのですが、なぜ関数を通過する前のconsole.log(b)**のmelonまでもが1になるのか、お教えいただけると幸いです。

実行環境

Microsoft Edge 開発者ツール内のコンソール(バージョン 96.0.1054.34)

(環境によっては理想通りに出力されるようなのですが、上記環境では疑問点のような出力が行われてしまいました。Chromeでも同様です。)

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

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

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

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

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

itagagaki

2021/12/01 01:49

提示のコードをコピペして実行した結果は以下の通りです。 [ 0, 1 ] [ { melon: 0, apple: 0 }, { melon: 0, apple: 1 } ] [ 1, 1 ] [ { melon: 1, apple: 0 }, { melon: 0, apple: 1 } ]
guest

回答2

0

なぜ関数を通過する前のconsole.log(b)のmelonまでもが1になるのか

それは変数の問題ではなくて、console.logの問題という可能性もあります。

環境によっては、console.logでオブジェクトを見ると、詳細を展開した瞬間の情報をとってくることがあります。

投稿2021/12/01 01:51

maisumakun

総合スコア146018

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

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

0

ベストアンサー

デバッガが参照するオブジェクトが更新されたオブジェクトを表示しているからでしょう

javascript

1console.log(b); 2↓↓↓ 3console.log(JSON.stringify(b));

とすると、consoleしている時点ではちゃんと更新前のデータになっていることが確認できます

投稿2021/12/01 01:53

yambejp

総合スコア116724

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

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

Bell.T

2021/12/01 02:06

ご回答いただいた旨を考慮して出力したところ、理想通りに出力されました。やはりデバッガーの特性だったのですね…。 ご回答いただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問