第一个:
var A = 26;
function test(){
var AA = A;
var B = 0;
function show(){
if(B>=AA) B = 0;
(AA==A)?++B:B=1;AA=A;
document.write(B);
}
return show;
}
var showlist = test();
showlist(); //1
showlist(); //2
showlist(); //3
showlist(); //4
var A=2;
showlist(); //1
showlist(); //2
showlist(); //1
showlist(); //2第二个:
循环遍历改变button的onclick事件
<script>
function a(id){
alert("这是第"+id+"个事件");
}
function b(id){
alert("这是第"+id+"个事件");
}
function replaceClick(){
var obj = document.getElementsByName("but");
for(var i = 1;i<=obj.length;i++){
var fin = i+4;
var id = "but"+ i;
document.getElementById(id).onclick = function(){b(fin)};
}
}
</script>
<body>
<input type="button" value="替换方法" onClick="replaceClick();">
<input name="but" id="but1" type="button" value="click me" onClick="a(1);">
<input name="but" id="but2" type="button" value="click me" onClick="a(2);">
</body>执行replaceClick后,各个button的点击结果都是一样的,与预期不符,是错误的结果。原来document.getElementById(id).onclick = function(){b(fin)};这里产生了一个闭包,function(){b(fin)}中并没有定义变量fin,它成为了该function的上一层函数里的变量fin的引用,所以,遍历更改完各button的点击事件后,出来的结果始终是最后一个fin的值。理解了这点,也就知道怎么处理了:function replaceClick(){
var obj = document.getElementsByName("but");
for(var i = 1;i <=obj.length;i++){
var fin = i+4;
var id = "but"+ i;
document.getElementById(id).onclick = function(_id){return function(){b(_id)}}(fin);
}
}
var A = 26;
function test(){
var AA = A;
var B = 0;
function show(){
if(B>=AA) B = 0;
(AA==A)?++B:B=1;AA=A;
document.write(B);
}
return show;
}
var showlist = test();
showlist(); //1
showlist(); //2
showlist(); //3
showlist(); //4
var A=2;
showlist(); //1
showlist(); //2
showlist(); //1
showlist(); //2第二个:
循环遍历改变button的onclick事件
<script>
function a(id){
alert("这是第"+id+"个事件");
}
function b(id){
alert("这是第"+id+"个事件");
}
function replaceClick(){
var obj = document.getElementsByName("but");
for(var i = 1;i<=obj.length;i++){
var fin = i+4;
var id = "but"+ i;
document.getElementById(id).onclick = function(){b(fin)};
}
}
</script>
<body>
<input type="button" value="替换方法" onClick="replaceClick();">
<input name="but" id="but1" type="button" value="click me" onClick="a(1);">
<input name="but" id="but2" type="button" value="click me" onClick="a(2);">
</body>执行replaceClick后,各个button的点击结果都是一样的,与预期不符,是错误的结果。原来document.getElementById(id).onclick = function(){b(fin)};这里产生了一个闭包,function(){b(fin)}中并没有定义变量fin,它成为了该function的上一层函数里的变量fin的引用,所以,遍历更改完各button的点击事件后,出来的结果始终是最后一个fin的值。理解了这点,也就知道怎么处理了:function replaceClick(){
var obj = document.getElementsByName("but");
for(var i = 1;i <=obj.length;i++){
var fin = i+4;
var id = "but"+ i;
document.getElementById(id).onclick = function(_id){return function(){b(_id)}}(fin);
}
}
http://topic.csdn.net/u/20091029/11/fbfbd3a6-92c1-47aa-a46d-64ad27bce178.html