mathOp = function(type){
return (
"add" == type? function(a,b){return a + b}
:"mul" == type? function(a,b){return a * b}
:"sub" == type? function(a,b){return a - b}
:"div" == type? function(a,b){return a / b}
)
}
Chrome JS调试工具说: SyntaxError:意外的令牌
这种语法有什么问题?
答案 0 :(得分:5)
您忘记了上一个: else
部分。
mathOp = function(type){
return (
"add" == type? function(a,b){return a + b}
:"mul" == type? function(a,b){return a * b}
:"sub" == type? function(a,b){return a - b}
:"div" == type? function(a,b){return a / b}
: function() { return NaN; /* or throw an exception */ }
)
}
您可以使用switch()
:
function mathOp(type) {
switch(type) {
case 'add': return function(a,b) { return a + b; };
case 'mul': return function(a,b) { return a * b; };
case 'sub': return function(a,b) { return a - b; };
case 'div': return function(a,b) { return a / b; };
}
}
答案 1 :(得分:4)
如前所述,a:失踪了。
但是,这是改进此代码的另一种方法。将操作放在表中(作为对象实现):
var ops = {
add: function(a, b) {return a + b;},
mul: function(a, b) {return a * b;},
sub: function(a, b) {return a - b;},
div: function(a, b) {return a / b;}
};
然后让mathOp
执行表查找,如果没有找到op,则采取适当的错误处理:
function mathOp(mytype) {
var op = ops[mytype];
if(!op) {
... error-handling ...
}
return op;
}
这样做的好处是,op函数只创建一次,而不是每次调用mathOp
,它更容易扩展,如果需要,表可以被其他函数使用。