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

Javascript: Proper closure syntax and formatting

本文关键字:语法 格式 闭包 Javascript      更新时间:2023-09-26

我对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[]时,它给了我以下错误:

Uncaught TypeError: Cannot read property 'push' of undefined

当我尝试手动输入sessionStorage.getItem(123)(带和不带引号)时,它也返回null。

为了测试这些值,我尝试了console.log(xmlObject)console.log(__data.x)进行调试,它们工作得很好,分别为我提供了XML对象和x的值。不确定为什么数组不工作或为什么整个对象不保存。如有任何提示,我将不胜感激。

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

arr.push(testArr[0])

this上下文可能指向window对象。window.arr未定义

阅读关于JS中的this上下文:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this