Javascript 事件处理程序函数上的全局和局部变量

Javascript 事件处理程序函数上的全局和局部变量,javascript,Javascript,这是我的javascript代码 window.onload = function(event){ var img = document.getElementsByTagName("img"); img[0].onmousedown = function(event){ alert(five); var five = 5; }; }; 我希望在第二次单击图像时,它会提醒数字“5”,但

这是我的javascript代码

window.onload = function(event){
    var img = document.getElementsByTagName("img");
    img[0].onmousedown = function(event){          
        alert(five);
        var five = 5;            
    };      
};
我希望在第二次单击图像时,它会提醒数字“5”,但它会继续提醒未定义。为什么? 然后我将alert语句移出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);     
};

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

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

 };  

在第二种情况下,您希望警告块外的局部变量,这就是为什么不可能的原因。

在第一种情况下,您首先警告变量,然后再声明它

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

 };  
在第二种情况下,您希望警告块外的局部变量,这就是为什么不可能的原因

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

    };
试试这个

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

    };

首先分配一个变量var 5=5;然后向它发出警报5;只需在第一个代码中交换这两行代码:

首先分配一个变量var five=5;然后向它发出警报5;只需在第一个代码中交换这两行代码:

这称为提升。所有变量声明都会冒泡到函数开始。但价值分配仍然存在

下面的代码

function() {
    alert(five);
    var five = 5;
}
将按以下方式执行:

function() {
    var five;
    alert(five);
    five = 5;            
}
每次单击时,都会创建一个新变量,因此,上一次调用的结果将被丢弃

如果需要在第一次调用时发出未定义警报,在所有其他调用时发出5警报,则似乎需要一个全局变量:

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

这叫做吊装。所有变量声明都会冒泡到函数开始。但价值分配仍然存在

下面的代码

function() {
    alert(five);
    var five = 5;
}
将按以下方式执行:

function() {
    var five;
    alert(five);
    five = 5;            
}
每次单击时,都会创建一个新变量,因此,上一次调用的结果将被丢弃

如果需要在第一次调用时发出未定义警报,在所有其他调用时发出5警报,则似乎需要一个全局变量:

var five; // Declaration here
window.onload = function(event){
    var img = document.getElementsByTagName("img");
    img[0].onmousedown = function(event){          
        alert(five);
        five = 5;            
    };      
};
这段代码将让您在第一次执行时得到未定义,在第二次执行时得到五个。要一直使用5,只需在赋值后执行警报


这段代码将让您在第一次执行时得到未定义,在第二次执行时得到五个。要使5始终保持不变,只需在分配值后执行警报。

在所有情况下,在初始化之前警报显示变量在所有情况下,在初始化之前警报显示变量通过,它将在第一次向5发出警报,通过,它也将在第一次向5发出警报