JavaScript冻结了浏览器

时间:2015-09-21 05:42:12

标签: javascript browser freeze

我正在尝试创建一个为HTML类使用生成重复的css属性的函数。该功能分三步进行。

  1. 使用以下内容创建对象:
  2.     var obj = new module('prefix', 'suffix');
    
    1. 添加几个属性:
    2.     obj.addProperty('width', 'px', 2);
          obj.addProperty('height', 'px', 2);
      
      1. 使用以下命令运行克隆过程
      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;
            }
        }
        

1 个答案:

答案 0 :(得分:2)

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

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

这里最后的语句总是等于3(0 + 3),所以循环永远不会完成。您可能希望将其更改为:

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

此修改会在每次迭代时不断增加i step,与您的初衷一样。