JavaScript Eval()生成';意外标记)错误';

JavaScript Eval()生成';意外标记)错误';,javascript,jquery,eval,Javascript,Jquery,Eval,下面的代码有点问题,我想知道我做错了什么 在进行eval调用的线路上,我收到一个未捕获的SyntaxError(意外令牌)错误 function myfunction(){ var p1 = ''; var p2 = ''; var p3 = ''; for (i=1; i<=3; i++){ eval("$('#p"+i+"').closest('.filter').find('.vals div').each(function(){if

下面的代码有点问题,我想知道我做错了什么

在进行eval调用的线路上,我收到一个未捕获的SyntaxError(意外令牌)错误

function myfunction(){
    var p1 = '';
    var p2 = '';
    var p3 = '';

    for (i=1; i<=3; i++){
        eval("$('#p"+i+"').closest('.filter').find('.vals div').each(function(){if ($.trim(p"+i+").length > 0) {p"+i+" += ',';} p"+i+" += $(this).attr('class');});");
    }
}
函数myfunction(){
var p1=“”;
var p2='';
var p3=“”;
对于(i=1;i您可能缺少一个“

FWI:与嵌套函数和链接不同,您会发现将其分解为几行离散的代码并使用命名函数要容易得多。

您的代码,无需评估

function myfunction(){
    var p1 = '';
    var p2 = '';
    var p3 = '';

    for (i=1; i<=3; i++){
        $("#p"+i).closest(//..... rest here
函数myfunction(){
var p1=“”;
var p2='';
var p3=“”;

对于(i=1;i您最好使用数组并正常执行代码:

function myfunction(){
    var p  = [null, '', '', '']; //Empty zeroth element to keep your 1-indexing

    for (i=1; i<=3; i++){
        $('#p'+i).closest('.filter').find('.vals div').each(function(){
            if ($.trim(p[i]).length > 0) {
                p[i] += ',';
            }
            p[i] += $(this).attr('class');
        });
    }
}
函数myfunction(){
var p=[null','','','];//空的第0个元素以保持1-1索引
对于(i=1;i 0){
p[i]+=',';
}
p[i]+=$(this.attr('class');
});
}
}

“我想知道我做错了什么”--我的答案是首先使用
eval()
…你有一个难以调试的语句。我不明白为什么没有
eval()
,你就不能写这篇文章…你可以跳过对像“$(''p'+I+')”这样的语句使用eval…只需使用$('p['+I)因为jquery将选择器作为字符串。我真的看不到eval在这里有什么好处。该死!+1比我快了一分钟!哈?完全不正确!ES5 10.4.2
eval
在大多数情况下都是在本地范围内运行的(在ES3中,我认为在所有情况下都是这样)@davin Yea,我的测试结构很差/我正在考虑
setTimeout
。但是仍然建议删除
eval
。@Dennis:太好了……感谢您认真阅读并花时间理解代码的目的(很抱歉,很难阅读)并提供了更好的解决方案。不,恐怕不行。我正在尝试在我的eval()中为不同名称的变量赋值;在循环时,应该使用数组,而不是使用不同的变量
function myfunction(){
    var p1 = '';
    var p2 = '';
    var p3 = '';

    for (i=1; i<=3; i++){
        $("#p"+i).closest(//..... rest here
function myfunction(){
    var p  = [null, '', '', '']; //Empty zeroth element to keep your 1-indexing

    for (i=1; i<=3; i++){
        $('#p'+i).closest('.filter').find('.vals div').each(function(){
            if ($.trim(p[i]).length > 0) {
                p[i] += ',';
            }
            p[i] += $(this).attr('class');
        });
    }
}