Javascript错误

Javascript错误,javascript,Javascript,我想我把匿名函数放错了。。。当它输出listzonebuffs时,它包含函数(){…部分 function load(zone){ setupzonebuffs(zone); document.getElementById('zonetitle').innerHTML=zone; listzonebuffs=""; if(zonebuffs['B']!=1){listzonebuffs+="<span class=\'"+function(){if(zonebuffs["B"]>

我想我把匿名函数放错了。。。当它输出listzonebuffs时,它包含函数(){…部分

function load(zone){

setupzonebuffs(zone);

document.getElementById('zonetitle').innerHTML=zone;

listzonebuffs="";
if(zonebuffs['B']!=1){listzonebuffs+="<span class=\'"+function(){if(zonebuffs["B"]>1){return "good";}else{return "bad";}}+"\'>Brute Force "+function(){if(zonebuffs['B']>1){return "+";}else{return "-";}}+" "+Math.round(Math.abs((1-zonebuffs['B'])*100))+"%</span>";}
if(zonebuffs['W']!=1){listzonebuffs+="<span class=\'"+function(){if(zonebuffs["W"]>1){return "good";}else{return "bad";}}+"\'>Wind "+function(){if(zonebuffs['W']>1){return "+";}else{return "-";}}+" "+Math.round(Math.abs((1-zonebuffs['W'])*100))+"%</span>";}
if(zonebuffs['I']!=1){listzonebuffs+="<span class=\'"+function(){if(zonebuffs["I"]>1){return "good";}else{return "bad";}}+"\'>Ice "+function(){if(zonebuffs['I']>1){return "+";}else{return "-";}}+" "+Math.round(Math.abs((1-zonebuffs['I'])*100))+"%</span>";}
if(zonebuffs['E']!=1){listzonebuffs+="<span class=\'"+function(){if(zonebuffs["E"]>1){return "good";}else{return "bad";}}+"\'>Energy "+function(){if(zonebuffs['E']>1){return "+";}else{return "-";}}+" "+Math.round(Math.abs((1-zonebuffs['E'])*100))+"%</span>";}
if(zonebuffs['F']!=1){listzonebuffs+="<span class=\'"+function(){if(zonebuffs["F"]>1){return "good";}else{return "bad";}}+"\'>Fire "+function(){if(zonebuffs['F']>1){return "+";}else{return "-";}}+" "+Math.round(Math.abs((1-zonebuffs['F'])*100))+"%</span>";}
if(zonebuffs['R']!=1){listzonebuffs+="<span class=\'"+function(){if(zonebuffs["R"]>1){return "good";}else{return "bad";}}+"\'>Earth "+function(){if(zonebuffs['R']>1){return "+";}else{return "-";}}+" "+Math.round(Math.abs((1-zonebuffs['R'])*100))+"%</span>";}
if(zonebuffs['A']!=1){listzonebuffs+="<span class=\'"+function(){if(zonebuffs["A"]>1){return "good";}else{return "bad";}}+"\'>Astronomical "+function(){if(zonebuffs['A']>1){return "+";}else{return "-";}}+" "+Math.round(Math.abs((1-zonebuffs['A'])*100))+"%</span>";}
if(zonebuffs['S']!=1){listzonebuffs+="<span class=\'"+function(){if(zonebuffs["S"]>1){return "good";}else{return "bad";}}+"\'>Stealth "+function(){if(zonebuffs['S']>1){return "+";}else{return "-";}}+" "+Math.round(Math.abs((1-zonebuffs['S'])*100))+"%</span>";}
document.getElementById('listzonebuffs').innerHTML=listzonebuffs;

}

var zonebuffs=new Array();
zonebuffs['B']=1;zonebuffs['W']=1;zonebuffs['I']=1;zonebuffs['E']=1;zonebuffs['F']=1;zonebuffs['R']=1;zonebuffs['A']=1;zonebuffs['S']=1;

function setupzonebuffs(zone){
switch(zone){
case 'Mist':
zonebuffs['S']=1.3;zonebuffs['W']=1.1;zonebuffs['F']=.9;
break;
}
}
功能加载(区域){
setupzonebuffs(区域);
document.getElementById('zonetitle')。innerHTML=zone;
listzonebuffs=“”;
if(zonebuffs['B']!=1){listzonebuffs+=“蛮力”+函数(){if(zonebuffs['B']>1){return“+”;}否则{return“-”;}}+''+Math.round(Math.abs((1-zonebuffs['B'])*100))+“%;}
if(zonebuffs['W']!=1){listzonebuffs+=“Wind”+函数(){if(zonebuffs['W']>1){return”+;}否则{return“-”;}}+''+Math.round(Math.abs((1-zonebuffs['W'])*100))+“%;}
if(zonebuffs['I']!=1){listzonebuffs+=“Ice”+函数(){if(zonebuffs['I']>1){return“+”;}否则{return“-”;}}+''+Math.round(Math.abs((1-zonebuffs['I'])*100))+“%;}
if(zonebuffs['E']!=1){listzonebuffs+=“Energy”+函数(){if(zonebuffs['E']>1){return“+”;}否则{return“-”;}}+''+Math.round(Math.abs((1-zonebuffs['E'])*100))+“%;}
if(zonebuffs['F']!=1){listzonebuffs+=“Fire”+函数(){if(zonebuffs['F']>1){return“+”;}否则{return“-”;}}+''+Math.round(Math.abs((1-zonebuffs['F'])*100))+“%;}
if(zonebuffs['R']!=1){listzonebuffs+=“Earth”+函数(){if(zonebuffs['R']>1){return“+”;}否则{return“-”;}}+''+Math.round(Math.abs((1-zonebuffs['R'])*100))+“%;}
if(zonebuffs['A']!=1){listzonebuffs+=“天文”+函数(){if(zonebuffs['A']>1){return“+”;}否则{return“-”;}}+''+Math.round(Math.abs((1-zonebuffs['A'])*100))+“%;}
if(zonebuffs['S']!=1){listzonebuffs+=“隐形”+函数(){if(zonebuffs['S']>1){return“+”;}否则{return“-”;}}+''+Math.round(Math.abs((1-zonebuffs['S'])*100))+“%;}
document.getElementById('listzonebuffs')。innerHTML=listzonebuffs;
}
var zonebuffs=新数组();
zonebuffs['B']=1;zonebuffs['W']=1;zonebuffs['I']=1;zonebuffs['E']=1;zonebuffs['F']=1;zonebuffs['R']=1;zonebuffs['A']=1;zonebuffs['S']=1;
功能设置ZoneBuffs(区域){
交换机(分区){
“薄雾”一案:
zonebuffs['S']=1.3;zonebuffs['W']=1.1;zonebuffs['F']=0.9;
打破
}
}

您应该清理此代码(老实说,它不可读),然后尝试替换:
+function(){if(COND){A}{B}+
by
+(COND?A:B)+

这是因为您可能不想将函数对象附加到字符串,而是想附加函数调用结果,也就是说,不是

x += "<span ...>" + function() { ... } + ...
x+=“”+函数(){…}+。。。
你可能想要

x += "<span ...>" + (function() { ... })() + ...
x++=“”+(函数(){…})(+)。。。

但是,我必须说,你的问题不是很明显。下次试着提供一个较小的局部问题样本,并将其解释得更清楚。在这样做的过程中,大多数时候,人们最终自己找到了解决方案…

使用三元运算符而不是函数

使用匿名函数时,返回的值是函数

例如:

var func_a = function(){
  alert('testing');
}
func_a();
在本例中,您需要使用三元运算符,它根据表达式有条件地返回值

条件?真:假
,根据条件返回真或假值

您的代码,已修复:

function load(zone){

setupzonebuffs(zone);

document.getElementById('zonetitle').innerHTML=zone;

listzonebuffs="";
if(zonebuffs['B']!=1){listzonebuffs+="<span class=\'"+(zonebuffs["B"]>1?"good":"bad")+"\'>Brute Force "+(zonebuffs['B']>1?"+":"-")+" "+Math.round(Math.abs((1-zonebuffs['B'])*100))+"%</span>";}
if(zonebuffs['W']!=1){listzonebuffs+="<span class=\'"+(zonebuffs["W"]>1?"good":"bad")+"\'>Wind "+(zonebuffs['W']>1?"+":"-")+" "+Math.round(Math.abs((1-zonebuffs['W'])*100))+"%</span>";}
if(zonebuffs['I']!=1){listzonebuffs+="<span class=\'"+(zonebuffs["I"]>1?"good":"bad")+"\'>Ice "+(zonebuffs['I']>1?"+":"-")+" "+Math.round(Math.abs((1-zonebuffs['I'])*100))+"%</span>";}
if(zonebuffs['E']!=1){listzonebuffs+="<span class=\'"+(zonebuffs["E"]>1?"good":"bad")+"\'>Energy "+(zonebuffs['E']>1?"+":"-")+" "+Math.round(Math.abs((1-zonebuffs['E'])*100))+"%</span>";}
if(zonebuffs['F']!=1){listzonebuffs+="<span class=\'"+(zonebuffs["F"]>1?"good":"bad")+"\'>Fire "+(zonebuffs['F']>1?"+":"-")+" "+Math.round(Math.abs((1-zonebuffs['F'])*100))+"%</span>";}
if(zonebuffs['R']!=1){listzonebuffs+="<span class=\'"+(zonebuffs["R"]>1?"good":"bad")+"\'>Earth "+(zonebuffs['R']>1?"+":"-")+" "+Math.round(Math.abs((1-zonebuffs['R'])*100))+"%</span>";}
if(zonebuffs['A']!=1){listzonebuffs+="<span class=\'"+(zonebuffs["A"]>1?"good":"bad")+"\'>Astronomical "+(zonebuffs['A']>1?"+":"-")+" "+Math.round(Math.abs((1-zonebuffs['A'])*100))+"%</span>";}
if(zonebuffs['S']!=1){listzonebuffs+="<span class=\'"+(zonebuffs["S"]>1?"good":"bad")+"\'>Stealth "+(zonebuffs['S']>1?"+":"-")+" "+Math.round(Math.abs((1-zonebuffs['S'])*100))+"%</span>";}
document.getElementById('listzonebuffs').innerHTML=listzonebuffs;

}

var zonebuffs=new Array();
zonebuffs['B']=1;zonebuffs['W']=1;zonebuffs['I']=1;zonebuffs['E']=1;zonebuffs['F']=1;zonebuffs['R']=1;zonebuffs['A']=1;zonebuffs['S']=1;

function setupzonebuffs(zone){
switch(zone){
case 'Mist':
zonebuffs['S']=1.3;zonebuffs['W']=1.1;zonebuffs['F']=.9;
break;
}
}
功能加载(区域){
setupzonebuffs(区域);
document.getElementById('zonetitle')。innerHTML=zone;
listzonebuffs=“”;
如果(zonebuffs['B']!=1){listzonebuffs+=“暴力”+(zonebuffs['B']>1?+”:“-”+”+“+Math.round(Math.abs((1-zonebuffs['B'])*100))+“%;}
如果(zonebuffs['W']!=1){listzonebuffs+=“Wind”+(zonebuffs['W']>1?”+“:”-”+“+”+”+数学圆(Math.abs((1-zonebuffs['W'])*100))+“%;}
如果(zonebuffs['I']!=1){listzonebuffs+=“Ice”+(zonebuffs['I']>1?”+“:“-”+”+”+“+Math.round(Math.abs((1-zonebuffs['I'])*100))+“%;}
如果(zonebuffs['E']!=1){listzonebuffs+=“能量”+(zonebuffs['E']>1?”+“:“-”+”+”+“+Math.round(Math.abs((1-zonebuffs['E'])*100))+“%;}
如果(zonebuffs['F']!=1){listzonebuffs+=“Fire”+(zonebuffs['F']>1?”+“:“-”+”+”+“+Math.round(Math.abs((1-zonebuffs['F'])*100))+“%;}
如果(zonebuffs['R']!=1){listzonebuffs+=“Earth”+(zonebuffs['R']>1?”+“:”-”+“+”+”+数学圆(Math.abs((1-zonebuffs['R'])*100))+“%;}
如果(zonebuffs['A']!=1){listzonebuffs+=“天文”+(zonebuffs['A']>1?”+“:”-”+“+”+”+数学圆(Math.abs((1-zonebuffs['A'])*100))+“%;}
如果(zonebuffs['S']!=1){listzonebuffs+=“隐形”+(zonebuffs['S']>1?”+“:“-”+”+”+“+Math.round(Math.abs((1-zonebuffs['S'])*100))+“%;}
document.getElementById('listzonebuffs')。innerHTML=listzonebuffs;
}
var zonebuffs=新数组();
zonebuffs['B']=1;zonebuffs['W']=1;zonebuffs['I']=1;zonebuffs['E']=1;zonebuffs['F']=1;zonebuffs['R']=1;zonebuffs['A']=1;zonebuffs['S']=1;
功能设置ZoneBuffs(区域){
交换机(分区){
“薄雾”一案:
zonebuffs['S']=1.3;zonebuffs['W']=1.1;zonebuffs['F']=0.9;
打破
}
}
请做格式化

为了减少冗余:

function cond1(val){
  return (val>1?"good":"bad");
}

function cond2(val){
  return (val>1?"+":"-");
}
function val1(val){
  return Math.round(Math.abs((1-val)*100));
}
if(zonebuffs['A']!=1){listzonebuffs+="<span class=\'"+cond1(zonebuffs["A"])+"\'>Astronomical "+cond2(zonebuffs['A'])+" "+val1(zonebuffs['A'])+"%</span>";}
if(zonebuffs['S']!=1){listzonebuffs+="<span class=\'"+cond1(zonebuffs["S"])+"\'>Stealth "+cond2(zonebuffs['S'])+" "+val1(zonebuffs['S'])+"%</span>";}
函数cond1(val){
返回值(val>1?“好”:“坏”);
}
函数cond2(val){
返回值(val>1?”+:“-”;
}
功能val1(val){
返回数学舍入(数学绝对值((1-val)*100));
}
如果(zonebuffs['A']!=1){listzonebuffs+=“天文”+cond2(zonebuffs['A'])+“”+val1(zonebuffs['A'])+“%;}
如果(zonebuffs['S']!=1){listzonebuffs+=“隐形”+cond2(zonebuffs['S'])+“”+val1(zonebuffs['S'])+“%;}

对于函数中的函数,这可能是一个很好的应用程序。您可以尝试以下操作:

function load(zone){
        setupzonebuffs(zone);
        document.getElementById('zonetitle').innerHTML=zone;

        var oneCompare = function(val, onTrue, onFalse){
            return (val > 1) ? onTrue : onFalse;
        };

        listzonebuffs="";
        if(zonebuffs['B']!=1){listzonebuffs+="<span class=\'"+oneCompare(zonebuffs["B"],'good','bad')+"\'>Brute Force "+oneCompare(zonebuffs["B"],'+','-')+" "+Math.round(Math.abs((1-zonebuffs['B'])*100))+"%</span>";}
        //More...

}
功能加载(区域){
setupzonebuffs(区域);
document.getElementById('zonetitle')。innerHTML=zone;
var oneCompare=函数(val、onTrue、onFalse){
返回值(val>1)?onTrue:onFalse;
};
listzonebuffs=“”;
如果(zonebuffs['B']!=1){listzonebuffs+=“暴力”+oneCompare(zonebuffs['B'],“+”,“-”)+”+Math.round(Math.abs((1-zonebuffs['B'])+“%;}
//更多。。。
}

您只创建了一个函数,而您应该调用它-关闭函数定义后添加()解决了这个问题。但是更简单的解决方案是使用

if(zonebuffs['W']!=1){listzonebuffs+="1? "good" : "bad") +"\'>Wind "+ (zonebuffs['W']>1 ? "+": "-")+" "+Math.round(Math.abs((1-zonebuffs['W'])*100))+"%";}
如果(zonebuffs['W']!=1){listzonebuffs+=“1?”“好”:“坏”)+“\'>风“+(zonebuffs['W']>1?”+”:“-”+”+”+数学.round(Math.abs((1-zonebuffs['W'])*100))+“;}Mauris走在正确的道路上,但这里仍然有一个“干的”违规行为。这就造成了l
function goodOrBad (key){ 
    if(zonebuffs[key] > 1){
       return "good";
    } else {
       return "bad";
    }
}


function percentageFor (key){
  return (zonebuffs[key] > 1 ? "+" : "-") + " " + Math.round(Math.abs((1-zonebuffs['W'])*100))+"%";
}

function textForZoneBuff(key, zone) {
  if(zonebuffs[key]!=1){ 
    return "<span class='"+ goodOrBad(key) + "'>" + zone + " " + percentageFor(key) + "</span> ";
  } else {
    return "";
  }
}

function load(zone){

  setupzonebuffs(zone);
  document.getElementById('zonetitle').innerHTML=zone;

  listzonebuffs= textForZoneBuff('B','Brute Force') 
               + textForZoneBuff('W','Wind') 
               + textForZoneBuff('I','Ice') 
               + textForZoneBuff('E','Energy') 
               + textForZoneBuff('F','Fire') 
               + textForZoneBuff('R','Earth') 
               + textForZoneBuff('A','Astronomical') 
               + textForZoneBuff('S','Stealth');

  document.getElementById('listzonebuffs').innerHTML=listzonebuffs;
}


var zonebuffs=new Array();

zonebuffs['B']=1;zonebuffs['W']=1;zonebuffs['I']=1;zonebuffs['E']=1;zonebuffs['F']=1;zonebuffs['R']=1;zonebuffs['A']=1;zonebuffs['S']=1;

function setupzonebuffs(zone){
switch(zone){
case 'Mist':
zonebuffs['S']=1.3;zonebuffs['W']=1.1;zonebuffs['F']=.9;
break;
}
}