为什么这个不变的变量会更改同一函数中的值? (是因为缓存吗?)

时间:2018-09-13 23:03:04

标签: javascript jquery json caching

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

打开网页时,我发现dragAndDropEnabled的值有冲突。第一个调试语句给出Line 41: Update NOT permitted。但是第二个调试语句给出Line 61: Update permitted

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

仅当我更改用户权限然后重新打开网页时,才会发生这种情况。这使我认为extraSettings JSON正在被缓存,而函数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]);
}

0 个答案:

没有答案