Javascript 可能的功能/变量提升问题

Javascript 可能的功能/变量提升问题,javascript,arrays,html,local-storage,Javascript,Arrays,Html,Local Storage,最初,您按下一个按钮,会出现提示,要求输入条目,条目被放置到类型“Wall”中,然后类型被“推”到数组“walls”中。然后调用函数wallTable(),将数组walls排列到前端的HTML5表中。(这一切都很好) 以下是wallTable()函数: function wallTable(){ var tableDiv = document.getElementById("wallTable"), table = "<table border='1'>" +

最初,您按下一个按钮,会出现提示,要求输入条目,条目被放置到类型“Wall”中,然后类型被“推”到数组“walls”中。然后调用函数
wallTable()
,将数组
walls
排列到前端的HTML5表中。(这一切都很好)

以下是
wallTable()
函数:

function wallTable(){
    var tableDiv = document.getElementById("wallTable"),
        table = "<table border='1'>" +
            "<thread><th>Room</th><th>Surface</th><th>Material</th><th>Width</th><th>Height</th><th>Surface Area</th></thread>";
    for(var i = 0, j = walls.length; i<j; i++){
        var wallTable = walls[i];
        console.log("Check 2");
        table += wallTable.tableRow();  //Uncaught TypeError: undefined is not a function.  wallTable       <------------?????????????????????????
        console.log("Check 3");
    }
    table += "</table>";
    tableDiv.innerHTML = table;
}
如果
localStorage(“wallArray”)
中没有任何内容,即使在输入内容之后,程序也可以正常运行。只有当您使用
localStorage(“wallArray”)
中的内容打开程序时,才会抛出错误。

您使用一个参数(walls)调用wallTable(),而您的声明不接受任何参数。。。 首先,试着这样声明:

function wallTable(walls){...}

或者,如果您希望继续不接受任何参数,请在wallTable()范围内不使用任何参数调用wallTable(),并确保可以正确访问墙。我假设您已经在某个地方全局声明了它。

当您将JavaScript对象传递给
JSON.stringify()
时,您将丢失对象的所有原始“个性”;您得到的只是一个带有属性值的JSON字符串。随后调用
JSON.parse()
返回普通对象。您的原始对象及其
.tableRow()
函数将不会被重新创建。您能否建议一种在不发生这种情况下存储信息的方法?该机制允许您对对象的还原方式进行一些控制。根据序列化的数据的性质,您可以使用它来使用类重新创建对象。本地存储和Cookie都将您可以保存的内容限制为纯字符串,因此在不涉及服务器端存储的情况下,没有其他选项。您在不同的上下文中使用相同的变量名,使一切都变得混乱。还有,当它不接受任何参数时,为什么你要将参数传递给
wallTable()
?是的,这是因为我刚才扔了一些东西,比如“请工作!”是的,这是因为我刚才扔了一些东西,比如“请工作,为什么你不工作?”但现在我知道了为什么,多亏了PointyBesides,我看到了你的“检查1”,“check 2”console.logs…这种进入程序的方式不是最优的。使用console.log直接检查JSON解析的内容(console.log(walls)),并尝试使用诸如FireFox之类的调试器,设置断点,在其中暂停并检查DOM树中的任何值、对象结构、数组内容。
function wallTable(walls){...}