Javascript 是否更新jQuery$(document).ready()基本范围内的变量?

Javascript 是否更新jQuery$(document).ready()基本范围内的变量?,javascript,jquery,variables,scope,document-ready,Javascript,Jquery,Variables,Scope,Document Ready,我正试图找到一种方法来减少选择器查找的次数。我的问题是,我有一个用base$(document).ready()定义的变量,它需要在$(document).ready()中嵌套的函数中更新 考虑这个例子(编辑:我更新了它,使其更具解释性) //var$current\u page=$home\u page** “如何更新变量$current_页面而不使其成为全局变量?” 您可以立即更新它。内部单击处理程序函数可以修改$current\u页面 “我正试图找到一种方法来尽量减少选择器查找的次数。”

我正试图找到一种方法来减少选择器查找的次数。我的问题是,我有一个用base$(document).ready()定义的变量,它需要在$(document).ready()中嵌套的函数中更新

考虑这个例子(编辑:我更新了它,使其更具解释性)


//var$current\u page=$home\u page**
  • “如何更新变量$current_页面而不使其成为全局变量?”

    您可以立即更新它。内部单击处理程序函数可以修改$current\u页面

  • “我正试图找到一种方法来尽量减少选择器查找的次数。”

    但事实上,如果您使用另一个选择器更改$current_页面,您将获得更多


但是我们并不清楚您真正想要做的是什么。

内部函数创建一个函数,在定义的范围内捕获变量。所以你已经得到了你想要的

…这是否是个好主意是另一回事

对于初学者来说,您实际上并没有修改所列代码中的值—您正在为
$current\u page
分配已初始化的相同值

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


$home\u page
$portfolio\u page
$about\u page
也同样如此-您的页面加载速度(稍微)变慢了,以后可能需要引用这些元素,当您可以根据需要查找时。

您可以向我们展示您遇到性能问题的地方和示例吗?ID选择器查找是目前为止最快的,如果您遇到性能问题,最好查看特定的瓶颈,而不是尝试在选择器级别上进行微优化。您当前的代码没有出现什么问题?您的示例在方法中对其进行了更改…但在附加
click
处理程序之前,已将其设置为该值。是否要重新运行选择器以查找新元素或其他内容?您的代码正在更新$current\u页面。我不明白你的问题。你想做什么?关于你的编辑:我看不出问题;正如我在下面所说的,变量在内部函数的范围内……我同意。这只是一个简短的示例,用于说明范围问题,而不是说明它可以从性能中获益。(我确实省略了另一个页面更改,谢谢!)我将对其进行编辑,以显示更深入的示例。该示例不更新$current_page变量(即,如果它与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>