2016-03-03 4 views
1

Предположим, у меня есть это:Как получить доступ к «более глобальной» переменной?

connection.query("something", data, function(err, res) { 
    console.log("inserted id is: " + res.insertId); 
    obj123.method1("something", function(res2) { 

    //how can I get access to res.insertId from here? 
    }) 
}); 

Мой вопрос в коде. И второй, как бы получить доступ к «более глобальным» «res», если я назвал аргумент «res» вместо «res2»?

+0

Вы бы не быть в состоянии сделать это, если вы каким-то образом не добавляете к нему другую ссылку. – epascarello

+0

У вас нет, если вы назовете обе переменные res. Пожалуйста, прочитайте: http://stackoverflow.com/questions/111102/how-do-javascript-closures-work?rq=1 –

ответ

1

Наиболее распространенный метод является просто создать некоторые временный буфер, который хранит ссылку на ваш переменный, например так:

connection.query("something", data, function(err, res) { 
    var tempRes = res; 
    console.log("inserted id is: " + res.insertId); 
    obj123.method1("something", function(res) { 
    tempRes.insertId(); 
    }) 
}); 
+0

, и если бы я назвал их по-другому, как в моем примере, я очень хорошо могу получить доступ к первой " Рез "? – Mario

+0

Да, тогда вы можете получить доступ к обоим из них под соответственно ** res ** и ** res2 ** именами – entio

1

вам просто нужно назначить res к другому переменному

connection.query("something", data, function(err, res) { 
    var anotherRes = res; //this line; 
    console.log("inserted id is: " + res.insertId); 
    obj123.method1("something", function(res) { 

    console.log(anotherRes.insertId); 
    }) 
}); 
+0

Нет необходимости создавать вторую переменную, ссылаясь на ту, которая была только что названа в строке выше ... Просто измените имя параметра функции. –

+0

, и если бы я назвал их по-другому, как в моем примере, я могу очень хорошо получить доступ к 1-му «res»? – Mario

+0

@ SébastienVercammen, что вредит при назначении внешних res, так что к нему можно получить доступ во внутренней функции, так как имя 'res' также будет использоваться внутри внутренней функции. – gurvinder372

Смежные вопросы