Windows 8 Javascript 疯狂 - 变量未定义

Windows 8 Javascript insanity - variable undefined

本文关键字:变量 未定义 疯狂 Javascript Windows      更新时间:2023-09-26

我正在从msdn网站上学习一些Windows 8教程。具体来说,我在这个问题上。

我的部分代码(从教程中复制)让我大吃一惊,为什么它会出错。示例如下:

(function () {
    "use strict";
    var list = getBlogPosts();
    var groupedItems = list.createGrouped(
        function groupKeySelector(item) { return item.group.key; },
        function groupDataSelector(item) { return item.group; }
    );
    var dataPromises = [];
    var blogs;
    var blogPosts = new WinJS.Binding.List();
    function getFeeds() {
        blogs = [
            {
                key: "blog1",
                url: 'http://windowsteamblog.com/windows/b/developers/atom.aspx',
                title: 'tbd', updated: 'tbd',
                acquireSyndication: acquireSyndication, dataPromise: null
            },
            // lots more entries ...
        ];
        blogs.forEach(function (feed) {
            feed.dataPromise = feed.acquireSyndication(feed.url);
            dataPromises.push(feed.dataPromise);
        });
        return WinJS.Promise.join(dataPromises).then(function () { return blogs });
    }
// more code...
})();

dataPromises.push(feed.dataPromise);行我收到错误JavaScript runtime error: Unable to get property 'push' of undefined or null reference.您可以看到dataPromises被定义并初始化为文件顶部附近的空数组(我也尝试使用 new Array(); 初始化它)。

我在这里做错了什么???我猜我搞砸了一些愚蠢的事情... 顺便说一下,dataPromises上面代码段中出现的唯一位置是它在项目中任何地方出现的唯一位置。

的第一个想法是提升,但除非发生神奇的事情,否则我不会在任何可能覆盖顶级函数范围的本地作用域中明确声明dataPromises

您没有正确遵循本教程。该行

var list = getBlogPosts();

替换new WinJS.Binding.List()调用,该调用发生在初始化 dataPromises 的行之后。

问题是getBlogPosts()正在调用getFeeds(),而getFeeds正在尝试将结果推送到dataPromises但行var dataPromises = []尚未执行,因此dataPromises仍然undefined

在初始化 dataPromises 变量后,将调用移动到 getBlogPosts() 到。

逐行单步执行调试器中的代码应该以相当直接的方式暴露此问题。