3

我正在尝试找到一种方法来最小化 Selector 查找的数量。我的问题是我有一个用基本 $(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 设置动画。是的,它缺少一些东西,是的,它可能没有意义。这只是一个例子,而不是实际的应用程序。

我知道这个例子对性能来说仍然微不足道,忽略这个事实。我只想知道如何做到这一点,而不是关于它是最佳实践还是性能的教训。多谢你们。

4

2 回答 2

1

内部函数创建一个闭包,捕获定义它的范围内的变量。所以你已经有了你想要的......

......这是否是一个好主意是另一回事。

对于初学者,您实际上并没有修改您列出的代码中的值 - 您正在分配$current_page它已经初始化的相同值。

但是假设您只是省略了通常用来为 选择不同值的代码$current_page,您需要问自己:这真的有必要吗?您正在执行基于元素 ID 的查找并将对该元素的引用缓存在变量中,而不知道您是否或何时真正需要它。充其量,这会导致潜在的不必要的查找;在最坏的情况下,它可能导致内存泄漏。为什么不只跟踪 ID 本身,并在您真正需要它的时间和地点查找元素呢?在您真正遇到性能问题之前不要担心性能......或者您可能会发现您过早的优化导致的问题多于解决的问题。

和- 您正在使您的页面加载(稍微)更慢,因为您稍后需要引用这些元素,当您可以根据需要查找它们时也是$home_page如此。$portfolio_page$about_page

于 2010-07-01T16:13:40.083 回答
0
  • “如何更新变量 $current_page 而不使其成为全局变量?”

    您可以立即更新它。内部点击处理函数可以修改 $current_page。

  • “我正在尝试找到一种方法来最小化 Selector 查找的数量。”

    但是,如果您要使用另一个选择器更改 $current_page ,实际上您似乎要赚更多。

但目前还不清楚你真正想要做什么。

于 2010-07-01T16:11:16.407 回答