Javascript:正确的闭包语法和格式

Javascript:正确的闭包语法和格式,javascript,jquery,Javascript,Jquery,我对JS/jQuery的使用只有一定的经验。我试图解析从IIS检索到的XML对象,以下是一些伪代码,大致描述了我的问题: //accepts an XML Object function dataFromAjax(object) { var x; // this is an int used to ID the object var y; var z; var arr = []; var __data

我对JS/jQuery的使用只有一定的经验。我试图解析从IIS检索到的XML对象,以下是一些伪代码,大致描述了我的问题:

    //accepts an XML Object
    function dataFromAjax(object) {
        var x; // this is an int used to ID the object
        var y;
        var z;
        var arr = [];
        var __data = this;
        var xmlObject = object;

        function readDataFromXMLObject() {
           __data.x = $(xmlObject).find("X").text();
           __data.y = $(xmlObject).find("Y").text();
           __data.z = $(xmlObject).find("Z").text();

           testArr = $(xmlObject).find("TestArrInfo").text().split(",");

           if(testArr[0] != null)
              __data.arr.push(testArr[0]);
           // ...
        }

        function storeData() {
            sessionStorage.setItem(__data.x, JSON.stringify(__data));
        }

        readDataFromXMLObject();
        storeData();
    }
在控制台中,在尝试解析arr[]时,它给了我以下错误:

未捕获类型错误:无法读取未定义的属性“push”

当我尝试手动键入类似于
sessionStorage.getItem(123)
(带引号和不带引号)的内容时,它也会返回null


为了测试这些值,我尝试了
console.log(xmlObject)
console.log(\uu data.x)
进行调试,这两种方法都很好,分别给了我XML对象和x值。不确定数组为什么不工作或整个对象为什么不保存。如果有任何提示,我将不胜感激。

在此范围内,您可以直接访问
arr

arr.push(testArr[0])
您的
上下文可能指向
窗口
对象<代码>窗口。arr未定义


阅读JS:

中的
上下文,谢谢!我假设它们必须通过_数据访问,因为console.log(x)未定义,但console.log(_data.x)返回了该值。我仍然需要弄清楚上下文是如何处理闭包的。