为什么浏览器会陷入这个javascript循环?

时间:2012-09-11 09:12:32

标签: javascript jquery

我无法发现浏览器挂起的原因并且在此函数的第一个for循环中被捕获,arguments.length也不打印console.log。

这是点击函数传递colorpicker自己的id然后变量其他属性要更改:

$('#colorSelector3').click(function(){
colorPickDynamic('#colorSelector3','h1','color');
});

以下是浏览器在第一个for循环中挂起的功能:

function colorPickDynamic(cp){
    var i,
        j,
        x,
        tag = [],
        colorProperty = [];

    for (x=0, i = 1, j = 2; x <= arguments.length; i+=2, j+=2, x++) {

        tag[x]=arguments[i];
        colorProperty[x]=arguments[j];

        console.log(arguments.length);
        console.log(colorProperty[x]);
    }

    $(cp).ColorPicker({
        color: '#0000ff',
        onShow: function (colpkr) {
            $(colpkr).fadeIn(500);
            return false;
        },
        onHide: function (colpkr) {
            $(colpkr).fadeOut(500);
            return false;
        },
        onChange: function (hsb, hex, rgb) {
            for (j = 2; j < arguments.length; j+=1) {
                $(tag[0]).css(colorProperty[0], '#' + hex);
            }
            $(cp + ' div').css('backgroundColor', '#' + hex);
        }
    });
}

任何帮助都会令人惊叹!感谢

1 个答案:

答案 0 :(得分:3)

你确定它会挂起(例如无限循环)吗?而不只是简单的崩溃?

因为您正在访问arguments[i],其中参数从1开始,每次迭代增加2。如果参数包含零个或一个元素,它将在第一次迭代时崩溃,尝试在任何日志记录完成之前访问arguments[1]

您打算访问arguments[x]吗?