題名の通り、関数の外から関数内の変数を使えるようにしたいです。
例えば、
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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
5
これではダメなのですか?
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
総合スコア3830
3
スコープといって、function input()の中で定義した変数はその関数の中でしか使えません。output()の中で使おうとすると、input()の外で定義する必要があります。
なお、input()の外に定義したvar aなどはグローバル変数といい、他に新たに定義したfunction other()でも使えるし、その他自作の関数すべてに適用されます。
ですが、グローバル変数はすべての関数からアクセスできるため、プログラムが長くなると、どの関数で書き込まれ、どの関数で読み込まれるのか管理するのが大変になります。また、よきせぬバグを作りこむ理由にもなります。
なので、グローバル変数は極力使わずに、関数内部で必要な変数は関数内部だけで使う方が管理しやすくなります。ES6ではオブジェクト志向的にjavascriptを記述できるので、こちらではクラス単位でも変数を定義できます。
投稿2017/12/27 15:37
総合スコア1161
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2
ベストアンサー
返り値で渡す
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総合スコア18189
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。