jQuery 插件中的自调用函数

self-calling function inside jQuery plugin

我正在使用下面的自调用函数用 javascript 生成一个树(嵌套的 UL 列表)。我可能会补充说它在 jQuery 插件中,如果它与问题完全相关(也许它可能是?)。

变量 gd 包含一个从文件结构中嗅探出来的 json/array,所以它基本上是文件夹和图像的名称,以及一些更多的数据(比如不言自明的 isFolder 属性等)

        for (i = 0; i < gd.length; ++i) {

被自呼打断

    var drawTree = function(self,parent){

        var gd = self.data('galleryData');

        self.data('sidebar', self.data('sidebar')+'<ul>');

        for (i = 0; i < gd.length; ++i) {

            console.log('looping '+i+': '+gd[i]['name']+', isFolder: '+gd[i]['isFolder']+', parent: '+gd[i]['parent']);

            if ( (gd[i]['isFolder'] == true) && (gd[i]['parent'] == parent) ) {
                console.error(gd[i]['name']);
                self.data('sidebar', self.data('sidebar')+'<li data-folder="'+gd[i]['fileId']+'" class="folderLink">');
                self.data('sidebar', self.data('sidebar')+gd[i]['name']);

                self.data('drawTree')(self,gd[i]['fileId']); // <-- The line causing trouble

                self.data('sidebar', self.data('sidebar')+'</li>');
            }
        }

        self.data('sidebar', self.data('sidebar')+'</ul>');

    };
    this.data('drawTree',drawTree);

我的问题是,如果我省略 "problem" 行

self.data('drawTree')(self,gd[i]['fileId']);

哪个是进行自我调用的(这使我也可以列出子文件夹)然后我得到所有 "level 0" 文件夹的整洁列表(没有父文件夹或父属性集的文件夹为空字符串)。但是我当然不会得到任何嵌套文件夹。

Root
    actions
    appz
    categoriez
    david
    devices
    mimetypes
    places
    space
    status

如果我确实包含自调用,我会获得所有嵌套级别,但仅限于 "level 0" 处的第一个文件夹,就像主循环一样(上面代码中的这一行)

Root
    actions
        actionsSub1
            actionSub2
                actionSub3
                    actionSub4

你有一个全局变量。不要将 var 视为可选。

for (i = 0; i < gd.length; ++i) {  <-- i is global

现在,当您将 var 放在 i 前面时,其他函数调用不会更改它。

for (var i = 0; i < gd.length; ++i) {