web-dev-qa-db-ja.com

javascriptの関数内にある関数内の変数にアクセスしますか?

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);

aundefined値を示しています。 aの値を外部で使用する必要があります。

4
Syam Ps

ありがとう。変数をグローバルとして宣言し、内部関数内に値を挿入してから、関数内で関数呼び出しを行って、値を呼び出す別の関数をトリガーしました。

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);}
0
Syam Ps

これは、暗黙的なグローバル変数の動作を使用して行うことができます。

function one(){
   function two(){
      a=10;
   }
  
  two();
}

one();
console.log(a);

Javascript I.Eで変数を宣言しない場合、つまりvarキーワードを使用しないと、グローバル変数になります。

さらに読むために:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/var#Implicit_globals_and_outer_function_scope

5
Tal87

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) {}
});
_
3
Soviut
//  You can simply do it by 
function test()
{
    this.name='xyz';
}
var obj = new test();

console.log(obj.name);
1
suraj

いいね:

function one() {
    this.two = function () {
        var a = 10;
        return a;
    }
}

var o = new one();
alert(o.two());
0
toto

returnステートメントを使用して、変数にグローバルにアクセスします。

function(){
var k=1;//local
return k;//global
}
result=k+10;//sample
0
Balakumar