2013-07-09 78 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個簡單的執行警報。