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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

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

Q&A

解決済

4回答

4003閲覧

JavaScript 引数に入れたboolean型の変数を変更したい

pecoro0321

総合スコア10

JavaScript

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

0グッド

0クリップ

投稿2019/07/04 23:38

実現したいこと

関数の引数にtrue / falseで定義した変数を入れて、関数内の最後でtrue or false を変更したいです。

試したこと

下記のコードを書いて、結果がtrueになると期待したのですが、falseになっていました。

JavaScript

1let flagboolean01 = false; 2 3const testFunc = function(flagboolean){ 4 // いろいろな処理 5 flagboolean = true; 6} 7testFunc(flagboolean01); 8 9console.log(flagboolean01); // false ←trueになることを期待したが、falseだった 10

ご教授いただけますと幸いです。
何とぞよろしくお願いいたします。

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

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

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

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

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

m.ts10806

2019/07/05 00:02

引数で渡す必要はないように思うのですが、どのような意図で渡していますか?
pecoro0321

2019/07/05 01:12

element01〜element09に対してそれぞれflagboolean01〜flagboolean09を用意して、同じ処理をさせたかった次第でした。testFunc(element01,flagboolean01);のように入れられるのかと思いまして。
m.ts10806

2019/07/05 01:16

前提条件や背景はきちんと書かれたほうがより的確な回答が得られます。 質問本文に追記しておいてください。
pecoro0321

2019/07/05 02:05

アドバイスありがとうございます!タイトルとまったく違う内容になってしまいそうなので、他の質問での投稿を検討したいと思います。
guest

回答4

0

ベストアンサー

下記のコードを書いて、結果がtrueになると期待したのですが、falseになっていました。

はい、JavaScriptの引数は値渡しですので、関数内で引数に別な値を代入しても呼び出し側は変化しません。

素直に、返り値にするほうがいいのではないでしょうか。

javascript

1let flagboolean01 = false; 2 3const testFunc = function(flagboolean){ 4 // いろいろな処理 5 return true; 6} 7flagboolean01 = testFunc(flagboolean01); 8

投稿2019/07/05 00:03

maisumakun

総合スコア145123

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

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

pecoro0321

2019/07/05 01:34

ご回答ありがとうございました!何がどのタイミングで代入されているかも誤解してしまっている気がするので、値渡し/参照渡しなどで検索した記事を読んで理解を深めたいと思います。
guest

0

maisumakunさんの考え方がベストですが、値渡し/参照渡しの理解すれば
無理やり参照渡しをする方法はあります
コードとしてはクソですが、こういうこともできますよという参考程度に

javascript

1const flagboolean01 = [false]; 2const testFunc = function(flagboolean){ 3 flagboolean[0] = true; 4} 5testFunc(flagboolean01); 6console.log(flagboolean01[0]);

投稿2019/07/05 00:18

yambejp

総合スコア114585

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

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

0

引数であるflagbooleanはこの関数スコープ内の新たに定義された変数となります。
この関数内でflagbooleanに値を代入した場合は、関数スコープ内のflagbooleanに値が代入されます。

この場合に、冒頭で定義したflagboolean01の値を書き換えたいなら、以下の書けます。

javascript

1let flagboolean01 = false; 2 3const testFunc = function(){ 4 // いろいろな処理 5 flagboolean01 = true; 6} 7 8testFunc();

代入時には、静的スコープの性質から、一つ外のスコープ内にある冒頭に定義したflagboolean01に値を代入することになります。

ただ、関数内から関数外の値を操作するのは今回のケースではお勧めできないので、以下のように関数が値を返す方が良いでしょう。

javascript

1let flagboolean01 = false; 2 3const testFunc = function(flagboolean){ 4 // いろいろな処理 5 flagboolean = true; 6 return flagboolean; 7} 8 9flagboolean01 = testFunc(flagboolean01); 10

投稿2019/07/05 00:09

編集2019/07/05 00:16
foobar810

総合スコア217

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

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

gentaro

2019/07/05 00:12

1行目の定義は末尾に01ってついてて「名前は同じ」ではないですね。
foobar810

2019/07/05 00:13

あ、本当ですね、すみません。
foobar810

2019/07/05 00:16

修正しました。
pecoro0321

2019/07/05 01:29

ご回答ありがとうございました!flagbooleaとflagboolean01は別のものなんですね。。関数と引数の関係から勉強しなおしたいと思います。かなり根本的なところから分かっていなかった気がします。。
guest

0

ミュータブルな値(たとえば配列)を引数で渡すと代用できるかもしれません。

js

1let flagboolean01 = [false]; 2 3const testFunc = function(flagboolean){ 4 // いろいろな処理 5 flagboolean[0] = true; 6} 7testFunc(flagboolean01); 8 9console.log(flagboolean01[0]); // true

投稿2019/07/05 00:23

Lhankor_Mhy

総合スコア35871

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

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

pecoro0321

2019/07/05 02:06

回答ありがとうございました!ミュータブル/イミュータブルについても勉強させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問