outerFunction で変数 "a" を定義します。innerFunction で使用したい。これが機能しないのはなぜですか?ネストされた関数間でデータを渡す最良の方法は何ですか?
var outerFunction = function () {
var a = 5;
innerFunction();
}
var innerFunction = function () {
alert(a);
}
outerFunction();
outerFunction で変数 "a" を定義します。innerFunction で使用したい。これが機能しないのはなぜですか?ネストされた関数間でデータを渡す最良の方法は何ですか?
var outerFunction = function () {
var a = 5;
innerFunction();
}
var innerFunction = function () {
alert(a);
}
outerFunction();
パラメータを内部関数に追加し、外部関数から値を渡す必要があります。
var outerFunction = function () {
var a = 5;
innerFunction(a);
}
var innerFunction = function (a) {
alert(a);
}
outerFunction();
innerFunction
outeFunction
から呼び出しているだけ の内部関数ではありませんouterFunction
。内部関数は次のように定義する必要があります。
var outerFunction = function () {
var a = 5;
var innerFunction = function () {
alert(a);
}
innerFunction();
}
JavaScript では、関数はそのコンテキストにバインドされています。内部で定義された変数outerFunction
は、グローバルコンテキストではなく、そこにのみ存在することを意味します。しかし、機能についてinnerFunction
は、このスコープは利用できません。そのため、アクセスできません。必要な場合は、引数としてinnerFunction
明示的に渡す必要があります。
実際にそれらをネストするだけです:
var outerFunction = function () {
var innerFunction = function () {
alert(a);
}
var a = 5;
innerFunction();
}
outerFunction();
innerFunction
のスコープ (alert
がアクセスできる) は、outerFunction
wherea
が宣言されているスコープ内にあります。
var は、変数のローカル スコープを定義します。変数を渡すつもりがない場合は、次のようにします。
var outerFunction = function () {
a = 5;
innerFunction();
}
var innerFunction = function () {
alert(a);
}
outerFunction();
しかし、クリーンなアプローチは、変数を渡すことです
innerFunction(a)