[英]JavaScript clipboard doesn't work when I use the mouseover event
[英]Why doesn't the mouseover event work when use closure in Javascript?
我有以下代碼
<ul>
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
</ul>
var lists = document.getElementsByTagName("li");
for(var i=0, len = lists.length; i< len; i++){
lists[i].onmouseover = function(){
console.log(i);
}(i);
}
預期結果:當鼠標懸停在每個li
,我在控制台中得到0或1或2或3,但是在mouseover
沒有刷新頁面時才得到那些數字,有人知道為什么嗎?
函數表達式之后的“調用括號” (i)
立即執行該函數,並將其返回值分配為事件處理程序( undefined
)。 這是一個帶有函數聲明的示例,它使(希望)更容易看到:
function foo(i) {
console.log(i);
}
// in the loop
lists[i].onmouseover = foo(i);
查看如何調用foo
並將返回值分配給lists[i].onmouseover
嗎?
您必須從立即調用的函數表達式中返回一個函數:
lists[i].onmouseover = (function(i){
return function() {
console.log(i);
};
}(i));
或帶有函數聲明:
function createHandler(i) {
return function() {
console.log(i);
};
}
// in the loop
lists[i].onmouseover = createHandler(i);
更多信息: 循環內的JavaScript閉合–簡單的實際示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.