事件处理函数的全局变量和局部变量

时间:2013-07-09 10:01:13

标签: javascript

这是我的javascript代码

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

我预计它会在第二次点击图像时警告数字'5',但它会一直警告undefined。为什么? 然后我移出onmousedown函数之外的alert语句,它什么也没显示:

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);     
};

5 个答案:

答案 0 :(得分: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;            
    };      
};

答案 1 :(得分:1)

试试这个

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

    };

答案 2 :(得分:0)

在第一种情况下,您首先在声明变量之前警告变量

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

 };  

在第二种情况下,您要提醒块外的局部变量,这就是不可能的原因

答案 3 :(得分:0)

首先分配变量var five = 5;然后提醒它alert(five);只需在第一个代码中交换这两行:)

答案 4 :(得分: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个,只需在分配值后执行警报。