JavaScript冻结浏览器

JavaScript Freezes The Browser

本文关键字:浏览器 冻结 JavaScript      更新时间:2023-09-26

我试图使一个函数,生成重复的css属性的HTML类使用。该函数分为三个步骤。

  1. 创建对象:
    var obj = new module('prefix', 'suffix');
  • 添加几个属性:
  •     obj.addProperty('width', 'px', 2);
        obj.addProperty('height', 'px', 2);
    
  • 运行克隆进程:
  •     obj.clone('15', '3');
    

    但是,它没有明显的原因就冻结了。下面是完整的代码:

    window.cloner_module = function(prefix, suffix) {
        this.properties = []
        this.prefix = prefix;
        this.suffix = suffix;
        this.addProperty = function(option, type, side) {
            var array = [];
            array.push(option, type, side);
            this.properties.push(array);
        }
        this.clone = function(max, step) {
            var array = [];
            var entry_count = 0;
            var innerModuleArray = [];
            var moduleArray = [];
            var property;
            var option;
            var type;
            var side;
            var value;
            var string = "";
    
            for (var i = 0; i < max; i + step) {
                innerModuleArray = [];
                moduleArray = [];
                moduleArray.push('.' + prefix + i + suffix + '{');
                for (var y = 0; y < this.properties.length; y++) {
                    property = this.properties[y];
                    option = property[0];
                    type = property[1];
                    side = property[2];
                    value;
                    if (!side) {
                        value = i;
                    } else if (side == '1') {
                        value = type + i;
                    } else if (side == '2') {
                        value = i + type;
                    } else {
                        console.log('"Side" property must be between 0 and 2');
                    }
                    string = option + ": " + value + "; ";
                    innerModuleArray.push(string);
                }
                moduleArray.push(innerModuleArray);
                moduleArray.push('}');
                array.push(moduleArray);
                entry_count++;
            }
            this.clones = array;
            this.last_entry_count = entry_count;
            this.last_step_registered = step; 
            this.last_max_registered = max;
        }
    }
    

    由于for循环,您的代码进入了无限循环,这反过来又导致浏览器冻结。核心问题是这一行:

    for (var i = 0; i < max; i + step)
    

    这里最后一条语句总是等于3(0 + 3),所以循环永远不会结束。你可能想把它改成:

    for (var i = 0; i < max; i += step)
    

    此编辑将按照您的初衷,在每次迭代中不断增加istep