我什么时候可以检查通过函数创建的变量/对象的长度?

时间:2016-11-02 18:37:25

标签: javascript google-chrome-extension

如果这很简陋,我道歉,但是广泛的谷歌和通过StackOverflow问题的拖延让我得到了解决方法,但没有答案。我确信答案就在那里,我只是不知道那里那里

我一直在尝试制作一个可以移动书签的简单Chrome扩展程序。有几点我想让for循环运行直到现有对象的长度。

这是我的意思的片段。如果我的JavaScript伤害眼睛,请原谅我:

var book = {title:[], id:[], url:[], parentId:[], children:[], index:[]};

function getHier(id) {
    obj = book.title.length;
    chrome.bookmarks.getChildren(id, function (children) {
        children.forEach(function (bookmark) {
            book.title[obj] = bookmark.title;
            book.id[obj] = bookmark.id;
            book.url[obj] = bookmark.url;
            book.parentId[obj] = bookmark.parentId;
            book.children[obj] = bookmark.children;
            book.index[obj] = bookmark.index;
            obj += 1;
        });
    });
};
getHier('0');
getHier('1');

此时,我想做这样的事情:

for(var i = 0, len = book.url.length; i <= len; i++){

       //DO SOMETHING

}

问题是,它没有像我预期的那样通过for循环运行。但是,如果我使其成为一个功能,并在控制台中调用 AFTER 我已经加载了我的扩展程序,那么效果很好。或者,如果我使用book.url.length整数,代码将按照我的预期执行。

作为旁注,我的剧本正文中也有document.addEventListener('DOMContentLoaded', function() {})。虽然我不认为这是问题的一部分(我已经评论过,问题仍然存在),但我认为值得一提。

我的问题是,我的变量/对象在什么时候被定义?显然当我尝试在我的for循环中引用它时,book.url.length没有被定义。那么何时可以“返回”到值我刚刚设置

更新1:

如果我将循环放入函数中,并在click内的document.addEventListener('DOMContentLoaded', function() {})事件上调用该函数,则该函数按预期执行我的循环。我假设这与调用控制台中的函数相同,因为在我可以单击任何按钮之前加载脚本;但这真的不是我想要发生的事情。我将继续更新,因为我在这方面骇人听闻,这可能是微不足道的问题。

0 个答案:

没有答案