2016-10-27 2 views
0

Я пытаюсь использовать переменную x, определенную внутри функции P, значение которой я пытаюсь установить в другой функции. Он всегда приходит неопределенным.Javascript Closure -Local variable inested function

Я попробовал применить свой разум, чтобы использовать закрытие, но это просто сходит с моей головы. Это не дает мне строку, а не объект.

Логика следующая.

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"; 
} 

}; 

Я попытался сохранение результата dataFromQuery.query (функция (данные) {к вар, а затем установить его в й, но он снова приходит как объект, который мне нужен как строка. Благодаря

+0

dataFromQuery.query, вероятно, является асинхронным запросом AJAX. «x» не будет определяться до тех пор, пока не будет разрешен запрос. Если вы пытаетесь получить доступ к «x» до его разрешения, оно будет неопределенным. – Hoyen

+0

На самом деле я попробовал распечатать значение x в console.log, который печатает значение, которое мне нужно. но за пределами этого блока скажите ниже, иначе я хочу увидеть его там, где он показывается undefined.So это означает, что это не проблема async? – NeverGiveUp161

+1

Также область «x» видна только внутри этой функции P. – Hoyen

ответ

-1

Я думаю, что вы ищете что-то вроде этого:.

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

Оба x и _P обернуты в корпусе и контекстный только автовыполняемой анонимную функцию _P возвращается и доступна var P во внешнем пространстве, но x останется скрытым.

+0

Я хочу позвонить P из разных мест. И как только он входит в P, значение X i будет использовать и вызывать другую функцию для вычисления чего-то. И я не могу понять, как ваше решение поможет. – NeverGiveUp161

+0

Это меняет сферу действия 'x', да, но это действительно не решает проблему. – Bergi