2010-07-01 23 views
3

我試圖找到一種方法來最小化選擇器查找的數量。我的問題是,我有一個基於$(document).ready()定義的變量,它需要在$(document).ready()中嵌套的函數內更新。

考慮這個例子(編輯:我更新了它更多解釋)

<script> 

//var $current_page = $home_page; **<--I DONT want to do this, going global 
             and of course it doesn't work since 
             $home_page isn't defined yet.** 

$(document).ready(function() { 
    var $home_page = $("#home-page"); 
    var $portfolio_page = $("#portfolio-page"); 
    var $about_page = $("#about-page"); 
    var $current_page = $home_page; // **<--This variable, in this scope level, 
            //  is what I want updated** 

    $("#home-btn").click(function() { 
    $current_page.stop() 
    $current_page.show() 
    $current_page.animate({ 
    duration: 360, 
    easing: 'easeInCirc', 
    complete: function() { 
     $(this).css({ top: -700 }); 
    } 

    ); 

    $current_page = $home_page; 
    }); 

    $("#portfolio-btn").click(function() { 
     $current_page.stop() 
     $current_page.show() 
     $current_page.animate({ 
     duration: 360, 
     easing: 'easeInCirc', 
     complete: function() { 
      $(this).css({ top: -700 }); 
     } 

    ); 

    $current_page = $portfolio_page; //<--This needs to somehow update the 
            // variable in the $(document).ready 
            // scope, but not global** 
    }); 
}); 
<script> 

如何更新變量$ CURRENT_PAGE 沒有使其成爲一個全局變量?

編輯: 這是爲了當你點擊一個菜單項時動畫出當前頁面div。是的,它缺少的東西,是的,它可能沒有意義。這只是一個例子,而不是實際的應用。

我明白這個例子對性能來說還是微不足道的,只是忽略了這個事實。我只想知道如何做到這一點,而不是教訓它是最佳做法還是表現。多謝你們。

+1

您能向我們展示您遇到性能問題的例子嗎? ID選擇器查找是最快的,如果遇到性能問題,查看特定瓶頸可能比嘗試在選擇器級別進行微優化更好。 – 2010-07-01 15:53:15

+1

你當前的代碼沒有發生什麼?你的例子在方法中改變了它......但是在'click'處理程序被附加之前它已經被設置爲這個。你想重新運行選擇器來尋找新的元素或什麼? – 2010-07-01 15:59:33

+0

您的代碼正在更新$ current_page。我不明白你的問題。 你想做什麼? – jantimon 2010-07-01 16:11:52

回答

0
  • 「我怎樣才能不使其成爲一個全局變量更新變量$ CURRENT_PAGE?」

    您可以立即更新它。內部點擊處理函數可以修改$ current_page。

  • 「我試圖找到一種方法來最小化選擇器查找的次數。」

    但是看起來事實上,如果您正在使用另一個選擇器更改$ current_page,那麼您即將製作更多。

但是你真的不知道你真的想做什麼。

1

內部函數創建一個closure,捕捉變量是在範圍之內。所以,你已經擁有你問什麼...

......這是否是一個好主意與否是另一件事。

對於初學者來說,你不是真正修改在您列出的代碼的價值 - 你分配$current_page它已經與初始化值相同。

不過,假設你只是省略了,你通常會使用挑不同$current_page的代碼,你需要問自己:這真的是連必要?您正在執行基於元素ID的查找,並在變量中緩存對該元素的引用,而無需知道您是否或何時會再次需要它。充其量,這會導致潛在不必要的查找;在最壞的情況下,它可能導致內存泄漏。爲什麼不直接跟蹤ID本身,並查看實際需要它的時間和地點?不要擔心性能,直到您實際遇到性能問題 ...或者您可能發現過早優化導致的問題比解決問題還要多。

同去的$home_page$portfolio_page$about_page - 你正在做的,你需要將這些元素的引用以後,當你也可以同樣看離機率使你的頁面加載(略)更慢他們根據需要。

+0

我同意。這只是示範範圍問題的一個簡短示例,而不是展示它將從性能中受益的節目。 (並且我確實省略了另一個頁面更改,謝謝!) 我要編輯它顯示一個更深入的示例。該示例不會更新$ current_page變量(也就是說,如果它不同於最初在document.ready範圍中設置的內容)。我試圖找到一種方式(不管人們對此的評論如何)來更新變量在它的原始範圍內,而不會導致一直到全局,只需在document.ready範圍內更新即可。 感謝您的幫助。 – Jay 2010-07-01 17:22:48

相關問題