2013-07-09 68 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;    
} 

每次点击时,会创建一个新的变量,所以,以前的结果呼叫被丢弃。

好像你需要一个全局变量,如果您需要在第一个呼叫,5在所有其他呼叫提醒undefined

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

之前都会显示alert show变量,因为它也会第一次提醒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个简单的执行警报。