首页 > 解决方案 > 为什么这个不变的变量会在同一个函数中改变值?(是因为缓存吗?)

问题描述

我有一个在$(document).ready(). 您会注意到我在函数中放置了两个调试语句。第一个调试语句获取dragAndDropEnabled函数顶部的值。第二条语句获取dragAndDropEnabledJSON 的“内部”属性中的值,如果向下滚动,您将看到该值。

当我打开网页时,我得到的dragAndDropEnabled. 第一个调试语句给出Line 41: Update NOT permitted. 但是第二个调试语句给出了Line 61: Update permitted.

为什么变量dragAndDropEnabled在同一个函数中假设两个不同的值,而在整个函数中保持不变?

这只发生在我更改用户权限然后重新打开我的网页时。这让我认为extraSettingsJSON 正在被缓存,而函数initialiseTree没有被缓存。因此,第一个调试语句给出了 的未缓存值dragAndDropEnabled,而第二个调试语句给出了 JSON 的缓存值。

这是我对正在发生的事情的最佳猜测。我的猜测是否正确(即缓存与未缓存)?如果是这样,我该如何纠正这种行为?如果不是,那是怎么回事?

var initialiseTree = function(dragAndDropEnabled) {

    $('#debugInfo').append("Line 41: " + (dragAndDropEnabled ? "Update permitted<br/>" : "Update NOT permitted<br/>"));

    var extraSettings = {
        edit: {

            drag: {

                inner: function(treeId, treeNodes, targetNode) {

                    $('#debugInfo').append("Line 61: " + (dragAndDropEnabled ? "Update permitted<br/>" : "Update NOT permitted<br/>"));

                    if (!dragAndDropEnabled)
                        return false;

                    // rest of code omitted
                }
            }
        }
    }

    $.extend(true, settings, extraSettings);

    zTree = $.fn.zTree.init($('#treeDiv'), settings, [rootNode]);
}

标签: javascriptjqueryjsoncaching

解决方案


推荐阅读