2013-07-09 4 views
1

Это мой Javascript кодглобальной и локальной переменной в функции обработчика событий

window.onload = function(event){ 
    var img = document.getElementsByTagName("img"); 
    img[0].onmousedown = function(event){   
     alert(five); 
     var five = 5;    
    };  
}; 

Я ожидал, что будет начеку число «5» на второй раз я нажал на изображение, но держать на предупреждения не определено .Зачем? Тогда я съехать предупреждения о вне OnMouseDown функции, не отображать ничего:

window.onload = function(event){ 
    var img = document.getElementsByTagName("img"); 
    img[0].onmousedown = function(event){   
     var five = 5;    
    };  
    alert(five);  
}; 

Тогда я думал, что проблема заключается в том, что она является то, что локальная переменная создается внутри OnMouseDown функции. Поэтому я просто создаю глобальную переменную, опустив «var», но похоже, что она тоже не работает, почему ???

window.onload = function(event){ 
    var img = document.getElementsByTagName("img"); 
    img[0].onmousedown = function(event){   
     var five = 5;   
    };  
    alert(five);  
}; 
+0

Во всех случаях предупреждение выводит переменную до ее инициализации – guy777

ответ

3

Это называется «подъем». Все объявления переменных «пузырятся» до начала функции. Но присвоение значения остается на месте

Следующий код

function() { 
    alert(five); 
    var five = 5; 
} 

Будет выполнена следующим образом:

function() { 
    var five; 
    alert(five); 
    five = 5;    
} 

Каждый раз, когда щелчок происходит, новая переменная создается, поэтому, результат предыдущего вызов отбрасывается.

Похоже, вам нужна глобальная переменная, если вам нужно, чтобы предупредить undefined на первый вызов и 5 на всех остальных вызовов:

var five; // Declaration here 
window.onload = function(event){ 
    var img = document.getElementsByTagName("img"); 
    img[0].onmousedown = function(event){   
     alert(five); 
     five = 5;    
    };  
}; 
0

В первом случае, во-первых оповещения переменной, прежде чем объявить его

img[0].onmousedown = function(event){ 
     var five = 5; //first should be declaration   
     alert(five); //then you should alert it 

}; 

во втором случае, если вы хотите, чтобы предупредить локальную переменную вне блока, поэтому не представляется возможным

1

Попробуйте это

window.onload = function(event){ 
     var five=0; 
     var img = document.getElementsByTagName("img"); 
     img[0].onmousedown = function(event){   
       if(five)alert(five); 
       five = 5;    
     };  

    }; 
0

сначала назначить переменную var five = 5;, затем предупредить ее alert(five); просто замените эти две строки в вашем первом коде :)

+1

тем, что она будет предупреждать 5 в первый раз – bugwheels94

0

http://codepen.io/anon/pen/mrdvJ

window.onload = function(event){ 
    var img = document.getElementsByTagName("img"), 
     five; 
    img[0].onmousedown = function(event) { 

      alert(five);   
      five = 5; 

    };   
}; 

Этот код позволит дать вам неопределенными, как во-первых, и пять при втором исполнении. Чтобы все 5 раз просто выполняли оповещение после присвоения значения.

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