变量是否可以包含函数开关?

时间:2014-07-28 20:17:40

标签: javascript

我一直在谷歌上搜索我的小心脏,但我要么提出错误的问题,要么它是如此模糊,它不存在。我想知道的是你可以定义一个变量,里面有一个开关。有关我的编程知识以及我将理解您的答案的程度。我是一名图形/网页设计师,在js方面只有一点经验。

像这样......

var variable = {
    switch (case) {
      case 'case1':
        return "something";
      case 'case2':
        return "something";
      case 'case3':
        return "something";
    };
  };

我知道我可以将开关分开并根据情况设置变量,但我只是想知道是否可以这样做。函数也可以在变量内吗?而且,它会怎么做?这会效率低吗?

4 个答案:

答案 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";
    };
  })();