2

这是我的 JavaScript 代码

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

我希望它会在我第二次单击图像时提醒数字“5”,但它一直在提醒 undefined。为什么?然后我将警报语句移出 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);     
};
4

5 回答 5

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;            
    };      
};
于 2013-07-09T10:05:46.637 回答
1

尝试这个

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

    };
于 2013-07-09T10:04:57.390 回答
0

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

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

 };  

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

于 2013-07-09T10:03:48.750 回答
0

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

于 2013-07-09T10:05:41.633 回答
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 个,只需在分配一个值后执行警报。

于 2013-07-09T10:09:32.937 回答