2015-07-02 1 views
0

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

function loopingFunction(){ 

    if(typeof(foo)=="undefined"){ 
     var foo = 0; 
    } 

    alert(foo); 

    if(foo==0){ 
     // some codes here 
    } 

    foo++; 
} 

loopingFunction вызывается несколько раз, и каждый раз, когда моя переменная Foo остается same..somehow его теряется, когда я стараюсь, чтобы увеличить его

счетчик не похоже на работу, которая будет увеличивать УАК Foo каждый раз, когда вызывается функция ..

есть ли обходной путь для этого? Любая помощь будет много иметь в виду ..

FYI я не могу сделать Foo глобальный, я должен найти обходной путь, используя закрытие ..

+0

где вы вызываете loopingFunction() в своем коде. мы не видели –

+0

Он вызывается извне .. –

+0

Показать полный код man –

ответ

2

Вы объявляете foo внутри функции. Он ограничен этой функцией. Каждый раз, когда вызывается функция, вы создаете новую переменную с именем foo.

Объявите его снаружи, если вы хотите повторно использовать одну и ту же переменную.

var foo; 
 

 
function loopingFunction() { 
 

 
    if (typeof foo === "undefined") { 
 
    foo = 0; 
 
    } 
 

 
    alert(foo); 
 

 
    if (foo == 0) { 
 
    // some codes here 
 
    } 
 

 
    foo++; 
 
} 
 

 
loopingFunction(); 
 
loopingFunction(); 
 
loopingFunction();

Вы можете выполнить все ваши инициализации за пределами цикла тоже просто вещи.

var foo = 0; 
 

 
function loopingFunction() { 
 

 
    alert(foo); 
 

 
    if (foo == 0) { 
 
    // some codes here 
 
    // … these could probably be moved outside the function too 
 
    } 
 

 
    foo++; 
 
} 
 

 
loopingFunction(); 
 
loopingFunction(); 
 
loopingFunction();

Если вы хотите сохранить foo от того, глобальный вы можете использовать замыкание:

var loopingFunction = function() { 
 

 
    var foo = 0; 
 

 
    function loopingFunction() { 
 

 
    alert(foo); 
 

 
    if (foo == 0) { 
 
     // some codes here 
 
     // … these could probably be moved outside the function too 
 
    } 
 

 
    foo++; 
 
    } 
 

 
    return loopingFunction; 
 

 
}(); 
 

 
loopingFunction(); 
 
loopingFunction(); 
 
loopingFunction();

+0

Есть ли в любом случае я могу избежать объявления глобальной переменной .. может ли здесь применяться ограничение? –

+0

@wasiim_dev - Да, вы можете использовать закрытие. – Quentin

+0

fantastic..thats то, что я искал .. –

0

Вы declarating локальную переменную. Вы должны инициализировать как глобальные двумя способами:

путь 1

var foo = 0; 
function looping.... 

путь 2

if(typeof(foo)=="undefined"){ 
    foo = 0; // without var is global 
} 
+0

Второй вариант не будет работать в строгом режиме. Неявные глобальные значения не рекомендуются. – Quentin

+0

Извините, но если вы наберете 'window.foo = 0', это будет нормально? –

+0

Он будет работать. Тем не менее, не очень хорошая практика. – Quentin

0

Вы объявили Foo переменная локальна сделать его как глобальную переменную.

var foo; 

function loopingFunction(){ 
    if(typeof(foo)=="undefined"){ 
     foo = 0; 
    } 
    if(!foo){ 
     // some codes here 
    } 
    foo++; 
} 
Смежные вопросы