我今天下午本來想做個就是tr滑鼠移出之後過三秒把對應的input添加hiddens類 然後我就這樣寫了 然後就一直不能得到我想要的效果 然後我就列印了setTimeout裡面的this 發現this指向了window 我去 我本意是想指向tr的呀 然後我就發現可能是閉包了 然後我對閉包也並不熟悉 然 ...
我今天下午本來想做個就是tr滑鼠移出之後過三秒把對應的input添加hiddens類
然後我就這樣寫了
$('.table>tbody>tr').mouseout(function(){ var index=$(this).index(); setTimeout(function(){ console.log(index); console.log($(this)); $(this).parents('.table').siblings('.check-btn').children('p').eq(index).children('input').addClass('hiddens'); },3000);
然後就一直不能得到我想要的效果
然後我就列印了setTimeout裡面的this
發現this指向了window
我去
我本意是想指向tr的呀
然後我就發現可能是閉包了
然後我對閉包也並不熟悉
然後我就看書了
然後我就找到瞭解答的方案
如下
$('.table>tbody>tr').mouseout(function(){ var index=$(this).index(); var that=$(this); setTimeout(function(){ console.log(that); that.parents('.table').siblings('.check-btn').children('p').eq(index).children('input').addClass('hiddens'); },3000); })
看到了嗎
用that=$(this)
在setTimeout外面定義
哇撒
然後that就指向了tr
但是這時我又有疑惑了
為什麼setTimeout裡面this會指向window呢
然後就發現我知識太少了
然後就得到了小伙伴的指導
原來
setTimeout是掛在window上面的全局方法
哇
是不是一目瞭然就知道了我疑惑setTimeout裡面的this指向問題
ps:原諒我的知識有限,經過園友的指出,原來這個不是閉包問題,所以我就改正了,謝謝謝謝各位園友,園友的力量是偉大的:
還有問了一些小伙伴說:閉包是變數的作用域的問題,這個是改變了 this 指向的