🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

4回答

638閲覧

[JavaScript]スコープについて

xjaPANDA

総合スコア124

JavaScript

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

0グッド

1クリップ

投稿2019/11/28 14:06

下記の var x のように、変数の中に、yの変数がある場合に、関数 test()内で、変数xのyの値をfalseに書き換えたいと思うのですが、うまくいかないので、どのようにすればよいのでしょうか?

<html> <body> <script> var y = true; var x = [ {key: '1', value: y}, {key: '2', value: y}, {key: '3', value: y}, {key: '4', value: y} ] console.dir(x); function test(){ y = false; console.dir(x); } test(); </script> </body> </html>

↓console.dir()のコンソール結果

イメージ説明

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

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

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

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

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

guest

回答4

0

ポイント

「変数」または「プロパティ」は、「オブジェクト」または「リテラル」を指します。
「変数」または「プロパティ」は、「変数」または「プロパティ」を指し ません

説明

以下のように書いたとき、
変数 x に入っているオブジェクトは、
変数 y ではなくリテラル true を指します。

js

1var x = [ 2 {key: '1', value: y}, 3 {key: '2', value: y}, 4 {key: '3', value: y}, 5 {key: '4', value: y} 6]

console.dir(x) の結果を思い出してください。
y ではなく true と表示されます。

イメージ説明

コード

value プロパティの値を変えたい場合は、
リテラルではなくオブジェクトを渡し、
オブジェクトのプロパティを変化させます。

js

1var y0 = { value: true }; 2var y1 = { value: true }; 3var y2 = { value: true }; 4var y3 = { value: true }; 5 6 7var x = [ 8{key: '1', y0}, 9{key: '2', y1}, 10{key: '3', y2}, 11{key: '4', y3} 12] 13 14console.dir(x); 15 16 17function test(){ 18 y0.value = false; 19 y1.value = false; 20 y2.value = false; 21 y3.value = false; 22 console.dir(x); 23} 24 25test();

投稿2019/11/28 14:20

編集2019/11/28 15:44
nico25

総合スコア830

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

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

0

スコープは明らかに無関係ですが、値を共有可能な「参照値」としてのプリミティブ値を必要としているなら、getterか new Proxy で外部変数を参照して対応します。
key,value形式のリストが必要なら、new Map に一定のメリットがあると考えます。

JavaScript

1'use strict'; 2const Sample = (()=>{ 3 let sharedY = false; 4 5 return class Sample { 6 constructor (x) { 7 this.x = x; 8 } 9 get y () { 10 return sharedY; 11 } 12 set y (value) { 13 return sharedY = value; 14 } 15 } 16})(); 17 18const map = new Map; 19 20for (let x = 1; x < 5; ++x) map.set(x, new Sample(x)); 21console.log([...map]); 22map.get(1).y = true; 23console.log([...map.values()].map(sample=>sample.y)); // [true, true, true, true]

Re: xjaPANDA さん

投稿2019/11/28 16:35

think49

総合スコア18189

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

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

0

関数 test()内で、変数xのyの値をfalseに書き換えたいと思う

関数 test()内で、変数xのyの値をfalseに書き換えてください。

javascript

1function test(){ 2 y = false; 3 x = [ 4 {key: '1', value: y}, 5 {key: '2', value: y}, 6 {key: '3', value: y}, 7 {key: '4', value: y} 8 ]; 9 console.dir(x); 10}

変数xの中に入っているのは、変数yへの参照ではありません。
代入式が評価された時点の変数y『値』(今回の場合、trueやfalse) です。

投稿2019/11/28 14:17

ku__ra__ge

総合スコア4524

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

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

0

関数の外にある変数はグローバル変数といいます。
ということで、「python グローバル変数」でぐぐってみよう

投稿2019/11/28 14:15

y_waiwai

総合スコア88038

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

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

kei344

2019/11/28 14:50

なぜ「python」なのでしょう?
y_waiwai

2019/11/28 22:06

あっ、素で間違えましたw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問