2016-08-03 2 views
0

Я пытаюсь изменить атрибут изображения src, а затем восстановить значение по умолчанию с помощью метода setInterval(), но кажется, что если я использую переменную внутри функции, она не работает должным образом и должна быть вне функция, почему переменное значение не изменится внутри функции?изменение переменной внутри функции

var Img1 = document.getElementById('img1'); 

setInterval(function(){ 
    var boolean= true; 
    if(boolean){ 
     Img1.src = "pic1.jpg"; 
     }else{ 
     Img1.src = "default.jpg"; 
    } 
    boolean= !boolean; 
} , 3000); 



// This one work properly! 

var Img1 = document.getElementById('img1'); 
var boolean= true; 

setInterval(function(){ 

    if(boolean){ 
     Img1.src = "pic1.jpg"; 
     }else{ 
     Img1.src = "default.jpg"; 
    } 
    boolean= !boolean; 
} , 3000); 
+9

Потому что вы его повторного объявления каждый раз, когда вы запускаете функцию. Самая первая строка в вашей функции - 'boolian = true', поэтому она будет устанавливать значение' true'. –

+0

Btw, более короткий способ сделать это: 'boolean^= true;' – 4castle

+0

@ 4castle, который, кажется, всегда всегда задает 'boolean''' 0', я что-то упускаю? –

ответ

1

Это потому, что логическое значение всегда истинно при вызове функции. Это первое, что делает функция, устанавливаются логической истина:

var boolean= true; 

Булевских не модифицируется внутри функции до тех пор, после того, как вы проверите, какие ЦСИ выбрать. Таким образом, ваше состояние всегда приходит к одному и тому же результату, который должен установить Img.src на pic1.jpg. Надеюсь, это поможет!

+0

правильно, исправит его –

0

В функции, отправленной в setInterval(), вы устанавливаете «boolean» как истину в начале каждой итерации функции. Таким образом, следующий код всегда будет устанавливать Img1.src = "pic1.jpg"; и строка Img1.src = "default.jpg"; никогда не будет запущен, потому что «boolean» истинно в каждом случае итерации.

setInterval(function(){ 
    var boolean= true; 
    if(boolean){ 
     Img1.src = "pic1.jpg"; 
    }else{ 
     Img1.src = "default.jpg"; 
    } 
    boolean= !boolean; 
} , 3000); 

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

const IMAGE_DEFAULT = "default.jpg"; 
const IMAGE_PIC1 = "pic1.jpg"; 

function StartImageInterval(img) { 
    var setDefault = true; 

    setInterval(function() { 
     img.src = ((setDefault) ? IMAGE_DEFAULT : IMAGE_PIC1); 
     setDefault = !setDefault; 
    }, 3000); 
} 

Вы тогда должны быть в состоянии вызвать эту функцию с

var Img1 = document.getElementById('img1'); 
StartImageInterval(Img1); 
Смежные вопросы