整数未正确更新



我下面有一个相当长的javascript文件,但了解整个文件并不重要,只有'totalItemCount'变量及其更新方式。此代码使用 Igloo API 递归计算目录中的文件数(该计数存储在 totalItemCount var 中(。我以前从未在Javascript中使用过递归,所以我可能犯了一个错误。由于某种原因,计数增加然后稍后在 javascript 控制台中下降,这让我认为我在某处更新该变量时犯了一个错误(它只在几个地方更新,但我找不到它(

编辑:我现在更新得更准确,但项目被高估或少计了大约 10%。我认为最后几次更新可能是问题所在,但我不确定。更新了以下代码:

new ApiClient({
apimethod: 'objects/7f6d706e-6754-e411-b5b8-d4ae5294c399/children/view',
method: 'get',
queryparams: {
    maxcount: 8000,
    startindex: 0,
    includefuturepublished: true
},
onSuccess: function (responseText) 
{
    var result = JSON.parse(responseText);
    var originalObject = result; //first, top-level object
    var totalItemCount = 0; //UPDATED HERE
    console.log(result.response);
    console.log(result.response.items);
    console.log('RESPONSE TITLE: ' + result.response.items[0].title);
    console.log("nnn");
    totalItemCount += parseInt(result.response.totalCount); //UPDATED HERE
    console.log("totalItemCount: " + totalItemCount);
    //Check if object has children and add to totalItemCount accordingly FOR EACH object:
    function getItemsRecursively(totalItemCount1)
    {
        for(var i = 0; i < parseInt(totalItemCount); i++) //at this point, totalCount == #objects at this lvl
        {
            console.log("FOR LOOP TEST: " + i);
            var currentObject = result.response.items[i];
            console.log("href/dir: " + currentObject.href);
            console.log("title: " + currentObject.title);
            console.log("numchildren: " + currentObject.numchildren);
            if(currentObject.numchildren > 0 && currentObject.numchildren != undefined)
            {
                console.log("it has children...");
                getChildrenItemCount(totalItemCount1, currentObject);
            }
            console.log("New totalItemCount: " + totalItemCount);
            console.log("n~~~~~ NEXT OBJECT ~~~~~n");
        }
    }
    function getChildrenItemCount(totalItemCount2, previousObject)
    {
        //totalItemCount2 = totalItemCount;
        var childID = previousObject.id;
        console.log("childID: " + childID);
        new ApiClient
        ({
            apimethod: 'objects/' + childID + '/children/view',
            method: 'get',
            queryparams: {
                maxcount: 8000,
                startindex: 0,
                includefuturepublished: true
            },
            onSuccess: function (responseText) 
            {
                console.log("getChildrenItemCount successful...");
                var result = JSON.parse(responseText);
                console.log(result);
                var currentObject = result.response;
                var currentFolderItemCount = currentObject.totalCount;
                console.log("currentFolderItemCount: " + currentFolderItemCount);
                for(var i = 0; i < parseInt(currentFolderItemCount); i++) //at this point, totalCount == #objects at this lvl
                {
                    console.log("CHILDREN FOR LOOP TEST: " + i);
                    var currentObject = result.response.items[i];
                    console.log("href/dir: " + currentObject.href);
                    console.log("title: " + currentObject.title);
                    console.log("numchildren: " + currentObject.numchildren);
                    if(currentObject.numchildren > 0 && currentObject.numchildren != undefined)
                    {
                        console.log("it's children has children...");
                        totalItemCount += parseInt(currentObject.numchildren); //UPDATED HERE
                        totalItemCount2 = totalItemCount; //UPDATED HERE
                        console.log("totalItemCount after one sub-child total: " + totalItemCount);
                        getChildrenItemCount(totalItemCount2, currentObject);
                    }
                    console.log("New totalItemCount after ENTIRE getChildrenItemCount: " + totalItemCount);
                    console.log("n~~~~~ NEXT OBJECT WITHIN CHILDREN ~~~~~n");
                    console.log("nnnnFINAL ITEM COUNT: " + totalItemCount);
                }
            }
        })
        //return totalItemCount;
    }
    getItemsRecursively(totalItemCount);
    console.log("nnnnFINAL ITEM COUNT: " + totalItemCount);
}

}(;

这是一个"范围"问题,您使用与函数参数相同的变量名和函数输出,因此参数覆盖全局变量。

请参阅以下内容:

var global = 10;
function test(global){
  global += 100;
  console.log(global);
}
console.log(global);
test(global);
console.log(global);

您只需删除 var 函数的参数即可。

var global = 10;
function test(){
  global += 100;
  console.log(global);
}
console.log(global);
test(global);
console.log(global);

我希望清楚,再见。

最新更新