Google Chrome崩溃,无法将变量识别为功能名称

时间:2013-11-12 12:44:55

标签: javascript jquery

以下代码适用于Firefox,但在Chrome上崩溃,出现以下错误:未捕获TypeError:属性' pos'对象[object Object]不是函数

这是代码,带有注释:

var CantidadMenu = $('div[class^=container_menu_]').length;
var position = $("#menu_unidades").position();
var IzAdd = 0;
var w = $("#menu_unidades").width();
var h = $("#menu_unidades").height();
for (i=0;i<CantidadMenu;i++){
    var pos = 'pos'+(i+1); //I create a variable that will hold a string like: pos1,pos2...
    IzAdd = IzAdd+25;
    function pos(div){ //on this line I use the variable I created, which crashes on Chrome
        var estilo1 = $(div).css({'left':IzAdd+25,'top':position.top+(IzAdd-25)});
        return estilo1;
    }
    pos('.container_menu_'+(i+1));
    $('.container_menu_'+(i+1)).css({'z-index':297+i,'width':w,'height':h});
}

2 个答案:

答案 0 :(得分:2)

在这里定义一个名为pos的函数:

function pos(div){ //on this line I use the variable I created, which crashes on Chrome
    var estilo1 = $(div).css({'left':IzAdd+25,'top':position.top+(IzAdd-25)});
    return estilo1;
}

console.log(pos) // function ....

在这里用字符串覆盖它:

var pos = 'pos'+(i+1);

console.log(pos) // string....

您应该将函数或字符串命名为其他内容。

PS:我知道在你的代码中顺序是相反的,但是函数声明被提升到作用域的顶部,所以JS解释器按照我写入的顺序“看到”它们:first function,then the string

PSS:崩溃实际上是在这一行:

pos('.container_menu_'+(i+1));

答案 1 :(得分:1)

function pos(div)var pos = function(div)...相同(除了前者在解析时定义,后者在运行时定义,但这与您的代码无关),所以如果您预期例如,通过定义pos = 'pos1';,您将function pos(div)变为function pos1(div)将不会

它只会覆盖pos变量,它将不再是字符串,而是一个函数。

要修复代码,请在代码顶部编写一个函数,在for循环之外,向其添加另一个参数(IzAdd),并确保正确修复函数调用。

该功能应如下所示:

function pos(div, IzAdd){
    return $(div).css({'left':IzAdd+25,'top':position.top+(IzAdd-25)});
}