Javascript 为什么单击不同按钮时会显示相同的数组值?
考虑以下代码:Javascript 为什么单击不同按钮时会显示相同的数组值?,javascript,arrays,function,scope,Javascript,Arrays,Function,Scope,考虑以下代码: <button id="btn-0">Button 1!</button> <button id="btn-1">Button 2!</button> <button id="btn-2">Button 3!</button> <button id="btn-3">Button 4!</button> <script type="text/javascript">
<button id="btn-0">Button 1!</button>
<button id="btn-1">Button 2!</button>
<button id="btn-2">Button 3!</button>
<button id="btn-3">Button 4!</button>
<script type="text/javascript">
var prizes = ['Watch','A Unicorn!', 'A Hug!', 'Fresh Laundry!'];
for (var btnNum = 0; btnNum < prizes.length-1; btnNum++) {
// for each of our buttons, when the user clicks it...
document.getElementById('btn-' + btnNum).onclick = function() {
// tell her what she's won!
alert(prizes[btnNum]);
};
}
</script>
按钮1!
按钮2!
按钮3!
按钮4!
var奖品=[‘手表’、‘独角兽’、‘拥抱’、‘新鲜衣物’];
对于(var btnNum=0;btnNum<0.length-1;btnNum++){
//对于我们的每个按钮,当用户单击它时。。。
document.getElementById('btn-'+btnNum).onclick=function(){
//告诉她她赢了什么!
警报(奖品[btnNum]);
};
}
我希望它能像点击不同的按钮一样工作,不同的数组值会出现。但它只会提醒“新鲜衣物”,无论点击哪个按钮。我不明白这里有什么问题?为什么通过for循环分配的每个函数表达式都引用奖品数组的最后一个元素?当您单击
btnNum的值时,所有单击事件处理程序的最后一个值都将是。因此,您的事件需要获得正确的值
您可以将事件侦听器放入立即调用的函数表达式中,该表达式传递btnNum
的值
var奖品=['Watch'、'anunicorn!'、'anhough!'、'freshwattery!'];
对于(var btnNum=0;btnNum<0.length-1;btnNum++){
(功能(el){
document.getElementById('btn-'+el).onclick=function(){
警报(奖品[el]);
};
})(b nnum);
}
按钮1!
按钮2!
按钮3!
按钮4代码>单击时,btnNum
的值将是所有单击事件处理程序的最后一个值。因此,您的事件需要获得正确的值
您可以将事件侦听器放入立即调用的函数表达式中,该表达式传递btnNum
的值
var奖品=['Watch'、'anunicorn!'、'anhough!'、'freshwattery!'];
对于(var btnNum=0;btnNum<0.length-1;btnNum++){
(功能(el){
document.getElementById('btn-'+el).onclick=function(){
警报(奖品[el]);
};
})(b nnum);
}
按钮1!
按钮2!
按钮3!
按钮4
这是因为所有闭包都引用相同的btnNum
变量。这是因为所有闭包都引用相同的btnNum
变量。您知道这是JavaScript标记中最常见的重复问题之一。为什么要回答它而不是指向前面的答案?@T.J.Crowder有道理。注意。您知道这是JavaScript标记中最常见的重复问题之一。为什么要回答它而不是指向前面的答案?@T.J.Crowder有道理。注意。