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

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

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

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

Q&A

解決済

4回答

49477閲覧

[javascript] 関数の外から関数内の変数を使う

moscow3

総合スコア201

JavaScript

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

0グッド

2クリップ

投稿2017/12/27 06:26

題名の通り、関数の外から関数内の変数を使えるようにしたいです。
例えば、

javascript

1 2function input(){ 3 var a=1 4 var b=2 5} 6 7function output(){ 8 console.log(a) 9 console.log(b) 10} 11 12input() 13output()

というような感じです。
(このままでは a is not defined 的なエラーが表示されてしまいます。)

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

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

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

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

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

guest

回答4

0

これではダメなのですか?

javascript

1var a,b; 2 3function input(){ 4 a=1; 5 b=2; 6} 7 8function output(){ 9 console.log(a); 10 console.log(b); 11} 12 13input(); 14output();

投稿2017/12/27 06:36

sousuke

総合スコア3828

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

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

0

スコープといって、function input()の中で定義した変数はその関数の中でしか使えません。output()の中で使おうとすると、input()の外で定義する必要があります。

なお、input()の外に定義したvar aなどはグローバル変数といい、他に新たに定義したfunction other()でも使えるし、その他自作の関数すべてに適用されます。
ですが、グローバル変数はすべての関数からアクセスできるため、プログラムが長くなると、どの関数で書き込まれ、どの関数で読み込まれるのか管理するのが大変になります。また、よきせぬバグを作りこむ理由にもなります。

なので、グローバル変数は極力使わずに、関数内部で必要な変数は関数内部だけで使う方が管理しやすくなります。ES6ではオブジェクト志向的にjavascriptを記述できるので、こちらではクラス単位でも変数を定義できます。

投稿2017/12/27 15:37

imamoto_browser

総合スコア1161

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

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

0

ベストアンサー

返り値で渡す

JavaScript

1'use strict'; 2function input () { 3 var a = 1; 4 var b = 2; 5 6 return {a: a, b: b}; 7} 8 9function output () { 10 var obj = input(); 11 12 console.log(obj.a); 13 console.log(obj.b); 14} 15 16output();

関数を返す (クロージャ)

JavaScript

1'use strict'; 2function input () { 3 var a = 1; 4 var b = 2; 5 6 return function (arg) { 7 return {a: a, b: b}[arg]; 8 }; 9} 10 11function output () { 12 var fn = input(); 13 14 console.log(fn('a')); 15 console.log(fn('b')); 16} 17 18output();

WeakMap

下記コードは簡単な例ですが、WeakMap はキーとなる変数のスコープが get() のスコープに直結する為、スコープ制御がしやすいメリットがあります。

JavaScript

1'use strict'; 2var wm = new WeakMap; 3 4function input (key) { 5 var a = 1; 6 var b = 2; 7 8 wm.set(key, {a: a, b: b}); 9} 10 11function output () { 12 var obj = {}, inputObject; 13 14 input(obj); 15 inputObject = wm.get(obj); 16 17 console.log(inputObject.a); 18 console.log(inputObject.b); 19} 20 21output();

Re: moscow3 さん

投稿2017/12/27 14:28

編集2017/12/27 14:37
think49

総合スコア18162

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

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

0

関数の中で定義した変数は関数を抜けると消えてしまいます。
他の方の回答のように関数の外で変数を定義すればどちらの関数からも参照できます。

投稿2017/12/27 13:48

hichon

総合スコア5737

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問