【问题标题】:Load Function not updating Global Variable加载函数不更新全局变量
【发布时间】:2018-03-14 22:33:12
【问题描述】:

我正在创建节点应用程序,但无法更新全局变量。

这是我的代码(ejs 文件):

 <% include ../partials/header %>

    <div class="page container">
        <div id="campgroundsRow" class="row">
        </div> <!-- row end -->
        <button id="loadMore">Load More</button>
    </div> <!-- Container End -->
    <% include ../partials/footer %>

    <script>
        var numGroundsToLoad = 1;
        var numGroundsLoaded = 0;

        loadCampgrounds(numGroundsLoaded, numGroundsToLoad);

        function loadCampgrounds(numGroundsLoaded, numGroundsToLoad) {
              var grounds = <%-JSON.stringify(campgrounds) %>
              for(var i=numGroundsLoaded + 1; i<numGroundsLoaded + numGroundsToLoad; i++) {
                   //code to add grounds[i] to campgroundsRow div
              }
              numGroundsLoaded += numGroundsToLoad;
        }

        $("#loadMore").on("click", function() {
              loadCampgrounds(numGroundsLoaded, numGroundsToLoad);   
        });
    </script>

我遇到的问题是loadCampgrounds 函数实际上并未更新numGroundsLoaded。所以当我点击加载更多按钮(#loadMore)时,它认为我正在添加ground[0].

我想要的是每次点击加载更多时,都会添加下一个地面。即,ground[0] 默认添加。然后加载更多,ground[1]。然后加载更多,ground[2] 等等(假设现在有无限的理由)。

如您所见,问题与范围和加载内容有关。

【问题讨论】:

    标签: javascript jquery scope global-variables ejs


    【解决方案1】:

    因为你更新了局部变量。在这种情况下,要更新全局变量,您需要通过window.numGroundsLoaded 访问它。

    【讨论】:

    • 太完美了。有效。你能解释一下为什么吗? (我接受你的回答,但它说等待 10 分钟)
    • 因为您应用于局部变量的所有更改都不会应用于原始变量。即使您传递一个对象,您也可以修改其属性,但不能修改对该对象的引用。它在这个文档中解释(developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions)。
    猜你喜欢
    • 1970-01-01
    • 2018-12-18
    • 2020-09-09
    • 2013-02-09
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多