2016-03-09 2 views
1

У меня есть проблема с обратным вызовом плагина Кордова, который может быть проиллюстрирована следующим кодом:Undefined переменной в функции обратного вызова

function foo(param) { 
    setTimeout(function(){ 
     console.log("In:", param); 
    }, 1000); 

    console.log("Out:", param); 
} 

foo(1); 

В этом примере, я притворяюсь на pluging обратного вызова через простой тайм-аут ,

Ожидаемый результат:

Out: 1 
In: 1 

Но проблема я столкнулся в том, что в моем реальном приложении с реальными плагинами обратных вызовов (не тайм-аута), иногда значение параметра функции в функции обратного вызова undefined , как если бы в предыдущем примере были получены следующие результаты:

Out: 1 
In: undefined 

Имеет ли смысл? Есть ли случай, когда переменная (параметр функции) перестает быть доступной в закрытии?

+0

Можете ли вы поделиться эти сценарии? Убедитесь, что вы не принимаете аргумент как аргумент обратного вызова, например 'setTimeout (function (param) {...' – Rayon

+0

Это огромное количество обратных вызовов, которые несколько раз вызываются из разных точек, некоторые из них из native. В любом случае я реорганизовал свой код и эта проблема больше не возникает.Просто любопытно, что может произойти. – IsidroGH

ответ

1

Есть ли случай, когда переменная (параметр функции) перестает быть доступной в закрытии?

Да, если вы измените параметр в области замыкания путем присвоения другого значения, см пример (например undefined.):

function foo(param) { 

    setTimeout(function() { 
     console.log("In:", param); 
    }, 1000); 

    // some function that returns 'undefined' 
    var someFunction = function() { 
     return undefined; 
    }; 

    console.log("Out:", param); 

    param = someFunction(); // or simply assign to 'undefined' 
} 

foo(1); 

Выход:

Out: 1 
In: undefined 
+0

Вы правы, но в моем случае я могу гарантировать, что переменная имеет значение при выходе из области действия функции ('foo' в этом примере), потому что Я печатаю его с помощью 'console.log' – IsidroGH

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