这是我的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);
};
答案 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个,只需在分配值后执行警报。