Javascriptの関数内にある関数内の変数にアクセスするにはどうすればよいですか?
var a;
var surveyObjects = Parse.Object.extend(surveyObject);
var query= new Parse.Query(surveyObjects);
query.count({
success: function(count){a = count;},
error: function(error){}
});
alert("count of function "+a);
a
はundefined
値を示しています。 a
の値を外部で使用する必要があります。
ありがとう。変数をグローバルとして宣言し、内部関数内に値を挿入してから、関数内で関数呼び出しを行って、値を呼び出す別の関数をトリガーしました。
var a=0;
var surveyObjects = Parse.Object.extend(surveyObject);
var query= new Parse.Query(surveyObjects);
query.count({
success: function(count) {a =count; total();},
error:function(error){}
});
function total(){alert (a);}
これは、暗黙的なグローバル変数の動作を使用して行うことができます。
function one(){
function two(){
a=10;
}
two();
}
one();
console.log(a);
Javascript I.Eで変数を宣言しない場合、つまりvar
キーワードを使用しないと、グローバル変数になります。
さらに読むために:
Javascript、およびほとんどの言語、スコープ変数の方法のため、関数の外部から関数の内部で宣言された変数にアクセスすることはできません。変数は関数のスコープにのみ属し、グローバルスコープには属しません。
幸い、関数は呼び出し元のスコープを継承します。したがって、関数の外部から変数にアクセスできるようにする最も簡単な方法は、最初に関数の外部で宣言してから、関数の内部で使用することです。
_function one(){
var a;
function two(){
a = 10;
return a;
}
return a;
}
_
変数のスコープを設定する方法には十分注意する必要があることに注意してください。機能の要点は、機能をカプセル化して分離することです。
Promiseの場合、promiseの外部で変数を宣言し、成功時にその値を設定できます。
_var a;
Parse.doSomething().then(function(data) {
a = data;
});
_
編集:コメントに示した内容に基づいて、非同期の問題が発生しています。 Promiseは非同期です。つまり、コード内で順番に実行されません。そのため、success
およびerror
コールバックが存在し、promiseが解決されると呼び出されます。 alert(a)
はpromiseコールバックの外側にあるため、Parse promiseが解決されるのを待たずにすぐに実行されるため、a
はまだ定義されていません。 alert(a)
をpromiseコールバック内に置くと、その時点でa
が設定されます。
_var a;
query.count({
success: function(count) {
a = count;
alert(a);
return a;
},
error: function(err) {}
});
_
// You can simply do it by
function test()
{
this.name='xyz';
}
var obj = new test();
console.log(obj.name);
いいね:
function one() {
this.two = function () {
var a = 10;
return a;
}
}
var o = new one();
alert(o.two());
returnステートメントを使用して、変数にグローバルにアクセスします。
function(){
var k=1;//local
return k;//global
}
result=k+10;//sample