我試圖將一個mouseenter和mouseleave事件綁定到容器中的每個<li>
,但是這兩個事件都共享了我希望在這兩個事件之間共享的幾個通用變量。
我知道這將是非常簡單的做這樣的事情:
$('.nav li')
.on('mouseenter', function()
{
var $children = $(this).find('.children'),
h = $children.children().outerHeight(),
speed = 250;
$children
.stop().clearQueue()
.animate({ height: h }, speed);
})
.on('mouseleave', function()
{
var $children = $(this).find('.children'),
h = $children.children().outerHeight(),
speed = 250;
$children
.stop().clearQueue()
.animate({ height: 0 }, speed);
});
但是什麼樣的性能hinderances將被捲入「每個」功能的範圍內存儲變量? (爲了避免兩者綁定複製和粘貼變量)
$('.nav li').each(function()
{
var $children = $(this).find('.children'),
h = $children.children().outerHeight(),
speed = 250;
$(this)
.on('mouseenter', function()
{
$children
.stop().clearQueue()
.animate({ height: h }, speed);
})
.on('mouseleave', function()
{
$children
.stop().clearQueue()
.animate({ height: 0 }, speed);
});
});
我沒有使用像(function(){})()
的原因是因爲每個項目都有它自己的孩子。
那麼,性能差異是什麼?
您將在綁定時獲得稍大的性能,但事件執行速度會稍快一點。這可能是不成熟的優化。假設這是一個導航菜單,兩者之間的差異可以忽略不計,我懷疑你有成千上萬的導航項目。 – 2013-02-26 20:01:55