2016-09-24 9 views
0

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の値を使用する必要があります。それのような

+0

コードを変更しない限り、できません。 – GolezTrol

+2

あなたが持っているコードは無意味です。 –

+0

は、私はそれが 機能だろう解析を使用して約束 を使用していている外側のスコープ内の変数/ –

答えて

0

感謝。 変数をグローバル関数として宣言し、内部関数の中に値を挿入し、その関数内で関数呼び出しを行って、その値を呼び出す別の関数をトリガーしました。

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

:ので、どのようにJavaScript、およびほとんどの言語の

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

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

おかげでみんな問題.butグローバルスコープを宣言する1(){ query.count({ 成功:機能(カウント){ c = count;}、 エラー:関数(エラー){}}); }警告(c);私はここでCの価値を得る必要があります。機能:;}、 誤差関数(カウント){C =カウント:問題はそれが 機能1(){ query.count({ 成功だろう、私は解析を使用して約束 を使用していますです.but –

1

、スコープ変数、関数の外から関数内で宣言した変数にアクセスすることはできません。変数は関数のスコープにのみ属し、グローバルスコープには属しません。

幸いにも、関数は呼び出し元のスコープを継承します。したがって、関数の外部から変数にアクセスできるようにする最も簡単な方法は、まず関数の外で宣言し、次に関数内で変数を使用することです。

function one(){ 
    var a; 

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

    return a; 
} 

変数のスコープの設定には非常に注意が必要です。機能の全ポイントは、機能をカプセル化し隔離することです。

約束事の場合、約束の外に変数を宣言し、その値を成功に設定することができます。

var a; 

Parse.doSomething().then(function(data) { 
    a = data; 
}); 

EDIT:はあなたがコメントで示したものに基づいて、あなたは非同期の問題を抱えています。プロミスは、コード内で順番に実行されない非同期の意味です。そのため、約束が解決された後に呼び出されるsuccesserrorコールバックが存在します。 alert(a)は約束のコールバックの外にあるので、Parse約束を解決するのを待たずにただちに実行されるので、aは未定義です。約束のコールバックにalert(a)を入れると、その時点でaが設定されます。

var a; 
query.count({ 
    success: function(count) { 
     a = count; 
     alert(a); 
     return a; 
    }, 
    error: function(err) {} 
}); 
+0

みんなありがとう(エラー){}}); }警告(c);私はここでCの価値を得る必要があります。 –

+0

Parseを使っていることをあなたの質問で明確にしておくべきです。私の答えで説明したのと同じ方法で、promiseハンドラ関数内の変数にアクセスできます。また、Parseサービスは非難され、数ヶ月で終了します。 – Soviut

+0

はい、オープンソースサーバを解析します。成功関数から外に値を取得する方法はありますか? –

2

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

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

 
one(); 
 
console.log(a);

あなたはそれがグローバル変数になりvarキーワードを使用していないjavascriptのすなわちで変数を宣言しない場合。さらに読書のための

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

+1

これは実際に巻き上げには関係しません。ホイスト機構はあなたの宣言が最初に処理されることを保証するだけです。アプリケーションで行10に 'var a'がある場合、' ReferenceError'を取得せずに行4で使用することができます。しかし、巻上げは可変的な移動スコープにはなりません。 – vlaz

+0

あなたは正しいです。私は私の答えを編集しました。ありがとう! – Tal87

0
// You can simply do it by 
function test() 
{ 
    this.name='xyz'; 
} 
var obj = new test(); 

console.log(obj.name); 
0

使用のreturn文は、グローバル変数にアクセスします。

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

pleasサンプルコードを追加 –

関連する問題