我一直在谷歌上搜索我的小心脏,但我要么提出错误的问题,要么它是如此模糊,它不存在。我想知道的是你可以定义一个变量,里面有一个开关。有关我的编程知识以及我将理解您的答案的程度。我是一名图形/网页设计师,在js方面只有一点经验。
像这样......
var variable = {
switch (case) {
case 'case1':
return "something";
case 'case2':
return "something";
case 'case3':
return "something";
};
};
我知道我可以将开关分开并根据情况设置变量,但我只是想知道是否可以这样做。函数也可以在变量内吗?而且,它会怎么做?这会效率低吗?
答案 0 :(得分:12)
您有时会看到用于代替switch
语句的对象文字。对于
例如,以下假设语法:
var variable = {
switch (switchOver) {
case 'case1':
return 'something1';
case 'case2':
return 'something2';
case 'case3':
return 'something2';
};
};
实际上可以这样写:
var variable = {
'case1': 'something1',
'case2': 'something2',
'case3': 'something3'
}[switchOver];
这只是一个简写符号:
var cases = {
'case1': 'something1',
'case2': 'something2',
'case3': 'something3'
};
var variable = cases[switchOver];
答案 1 :(得分:8)
return
用于从函数返回,而不是为变量赋值。所以这个问题的答案是否定的。你可以使用自我调用功能来完成你所拥有的几乎所有的东西。
var content = (function(){
switch (options.type) {
case 'image':
return "<img src="+href+"/>";
case 'iframe':
return "<iframe src="+href+"/>";
case 'swf':
return 'something else';
}
})();
答案 2 :(得分:2)
保持简单。最简单的解决方案是这样的:
var content;
switch (options.type) {
case 'image':
content = "<img src="+href+"/>";
break;
case 'iframe':
content = "<iframe src="+href+"/>";
break;
case 'swf':
content = "<object width="+width+" height="+height+" data="+href+"></object>";
}
这是干净,高效且易于理解的。
如果确实想要使用某个功能,您可能想要使用immediately invoked function expression(或IIFE):
var content = (function() {
switch (options.type) {
case 'image':
return "<img src="+href+"/>";
case 'iframe':
return "<iframe src="+href+"/>";
case 'swf':
return "<object width="+width+" height="+height+" data="+href+"></object>";
})();
但是这会(略微)变慢,并且在您维护代码之后出现的人更难理解。尽管如此,它在某些情况下可能很有用,例如,如果您有一堆临时变量,您不希望“泄漏”到您的范围的其余部分。
我建议您仔细权衡此解决方案的新颖性与未来的维护成本。
答案 3 :(得分:1)
你可以为它分配一个执行过的函数:
var variable = (function () {
switch (case) {
case 'case1':
return "something";
case 'case2':
return "something";
case 'case3':
return "something";
};
})();