2016-10-27 2 views
0

Ich versuche, eine Variable x in einer Funktion P definiert, deren Wert ich in einer anderen Funktion einstellen möchte. Es kommt immer undefiniert.JavaScript-Schließung -Lokale Variable verschachtelte Funktion

Ich habe versucht, meinen Verstand zu verwenden, um Verschluss zu verwenden, aber es geht nur von meinem Kopf. Es gibt mir keine Saite, sondern ein Objekt.

Die Logik ist wie folgt.

function P(i){ 
var x; 
if(i!=null){  
//this pulls the data correctly and i could see it in network tab response. 
var dataFromQuery=widgets.DATA.create({ 
    url:"abc/cde", 
    queryTemplate :"/query"+i+ "?" 
}); 
    //we query the data and set the value as per the logic. 
    dataFromQuery.query(function(data){ 
     if(data[0].name){ 
      x=data[0].name; // this stays undefined , and i understand this is a new local variable x.Also the value is here and comes fine here so no issues with the data but i want to set it to the variable defined outside as x. 
     } 
    }) 
} 
else{ 
    x="somehardcode"; 
} 

}; 

habe ich versucht, das Ergebnis dataFromQuery.query (function (Daten) auf eine {var Speicherung und dann zu x Einstellung, aber es kommt wieder als ein Objekt, das ich als String benötigen. Dank

+0

dataFromQuery.query ist wahrscheinlich eine AJAX-asynchrone Anfrage. 'x' wird erst definiert, nachdem die Anfrage gelöst wurde. Wenn Sie versuchen, auf "x" zuzugreifen, bevor es aufgelöst wird, ist es undefiniert. – Hoyen

+0

Eigentlich habe ich versucht, den Wert von x in console.log zu drucken, der den Wert druckt, den ich brauche. aber außerhalb dieses Blockes sagst du unten, sonst möchte ich es dort sehen, es zeigt undefined.So bedeutet das, dass es nicht das asynchrone Problem ist? – NeverGiveUp161

+1

Auch der Umfang von 'x' ist nur innerhalb dieser Funktion sichtbar P. – Hoyen

Antwort

-1

ich glaube, du bist für so etwas suchen.

var P = (function() { 
    var x; 
    function _P(i) { 
     //your internal logic here 
    } 
    return _P; 
})(); 

Sowohl x und _P sind in das Gehäuse eingewickelt und scoped nur auf die auto-ausgeführt anonyme Funktion _P zurückgegeben wird und als var P im äußeren Bereich, aber x bleibt ausgeblendet.

+0

Ich möchte P von verschiedenen Orten aufrufen. Und sobald es P eingegeben wird, wird der Wert von X ich verwenden und eine andere Funktion aufrufen, um etwas zu berechnen. Und ich bin nicht in der Lage zu bekommen, wie Ihre Lösung helfen wird. – NeverGiveUp161

+0

Das ändert zwar den Umfang von 'x', ja, aber das löst das eigentliche Problem nicht wirklich. – Bergi