Javascript 事件处理程序函数上的全局和局部变量
这是我的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”,但
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发出警报