Javascript循环不能与本地存储一起工作

Javascript Loop not working with local storage

本文关键字:存储 一起 工作 循环 不能 Javascript      更新时间:2023-09-26

我有加载变量并将其转换为数字的代码,我可以用这些做数学,并可以在页面上显示它们,但我有函数,在加载之前工作,使用这些变量自动添加1到变量。我有一个循环来运行这个自动加法。然而,在添加了加载之后,循环似乎不工作了。

if(typeof(Storage)!=="undefined") {
            var hotdogs = parseInt(localStorage.getItem('hotdogs'), 10);
            var bread = parseInt(localStorage.getItem('bread'), 10);
            var hotdog = parseInt(localStorage.getItem('hotdog'), 10);
            var sauce = parseInt(localStorage.getItem('sauce'), 10);
            var bakeries = parseInt(localStorage.getItem('bakeries'), 10);
            var butchers = parseInt(localStorage.getItem('butchers'), 10);
            var sauceries = parseInt(localStorage.getItem('sauceries'), 10);
        }
        else {
            var hotdogs = 0;
            var bread = 0;
            var hotdog = 0;
            var sauce = 0;
            var bakeries = 0;
            var butchers = 0;
            var sauceries = 0;
        }
function buyBakery(){
            var bakeryCost = Math.floor(20 * Math.pow(1.05,bakeries));     
            if(hotdogs >= bakeryCost){                                   
                bakeries = bakeries + 1;                                   
                hotdogs = hotdogs - bakeryCost;                          
                document.getElementById('bakeries').innerHTML = bakeries;  
                document.getElementById('hotdogs').innerHTML = hotdogs;  
            };
            var nextCostBakery = Math.floor(20 * Math.pow(1.05,bakeries));      
            document.getElementById('bakerycost').innerHTML = nextCostBakery;  
        }; 
(function loop(timer) {
            setTimeout(function() {
                breadClick(bakeries);
                hotdogClick(butchers);
                sauceClick(sauceries);
                customers(custom);
                loop(1000);
            }, timer)
        })(1000)

对于初学者来说,您似乎没有在循环中调用buyBakery()方法。

其次,即使定义了"存储",您正在查找的项目也可能不在其中。在这种情况下,它将返回null,而parseInt()将转换为NaN(非数字)

还要确保在循环中调用的其他函数存在并且没有抛出任何错误。使用web控制台。

你可能想要考虑保存值回到localStorage(如果你还没有这样做),所以你可以以后得到它。在我的例子中,我已经添加了一个函数来做到这一点。

试试这样的东西。

function loadFromLS(item) {
    var ret = 0;
    if (typeof (Storage) === 'undefined') {
        return ret;
    }
    if (null === (ret = localStorage.getItem(item))) {
        ret = 0;
    }
    return parseInt(ret, 10);
}
function saveToLS(item, val) {
    if (typeof (Storage) === 'undefined') {
        return;
    }
    localStorage[item] = val;
}
var hotdogs = loadFromLS('hotdogs');
var bread = loadFromLS('bread');
var hotdog = loadFromLS('hotdog');
var sauce = loadFromLS('sauce');
var bakeries = loadFromLS('bakeries');
var butchers = loadFromLS('butchers');
var sauceries = loadFromLS('sauceries');
function buyBakery() {
    var bakeryCost = Math.floor(20 * Math.pow(1.05, bakeries));
    if (hotdogs <= bakeryCost) {
        bakeries = bakeries + 1;
        hotdogs = hotdogs - bakeryCost;
        document.getElementById('bakeries') .innerHTML = bakeries;
        document.getElementById('hotdogs').innerHTML = hotdogs;  
    };
    var nextCostBakery = Math.floor(20 * Math.pow(1.05, bakeries));
    document.getElementById('bakerycost') .innerHTML = nextCostBakery;
};
(function loop(timer) {
    setTimeout(function () {
        breadClick(bakeries);
        hotdogClick(butchers);
        sauceClick(sauceries);
        customers(custom);
        loop(1000);
    }, timer)
}) (1000)