在javascript中切换函数的最佳方法?

时间:2013-11-09 00:12:19

标签: javascript toggle

我在jquery中看到了关于切换功能的不同主题,但现在什么是在功能之间切换的最佳方法? 有没有办法可以做到这一点所以我不需要垃圾收集所有的切换脚本?

一些例子是:

var first=true;
function toggle() {
   if(first) {
      first= false;
      // function 1
   }
   else {
      first=true;
      // function 2
   }
}

var first=true;
function toggle() {
   if(first) {
      // function 1
   }
   else {
      // function 2
   }
first = !first;
}

var first=true;
function toggle() {
  (first) ? function_1() : function_2();
  first != first;
}
function function_1(){}
function function_2(){}

3 个答案:

答案 0 :(得分:0)

返回新功能

var foo = (function(){
    var condition
         , body
    body = function () {
        if(condition){
             //thing here
        } else {
            //other things here
        }
    }
    return body
}())` 

答案 1 :(得分:0)

最好取决于您的应用程序所需的标准。这可能不是最好的方法,这当然是一种可爱的方式:

function toggler(a, b) {
   var current;
   return function() {
      current = current === a ? b : a;
      current();
   }
}

var myToggle = toggler(function_1, function_2);
myToggle(); // executes function_1
myToggle(); // executes function_2
myToggle(); // executes function_1

答案 2 :(得分:0)

这是一个古老的问题,但我也想做出贡献。

  

有时在大型项目中我会分配切换脚本并使用全局变量来确定它是否被切换。因此,这些变量需要进行垃圾收集以组织变量,例如,如果我可能以某种方式使用相同的变量名称或类似的东西

您可以尝试这样的事情..:(使用您的第一个示例)

function toggle() {
    var self = arguments.callee;
    if (self.first === true) {
        self.first = false;
        // function 1
    }
    else {
        self.first = true;
        // function 2
    }
}

没有全局变量。我刚刚将属性first添加到函数范围中 这种方式也可以与其他切换函数使用相同的属性名称。

警告: arguments.callee在严格模式下被禁止'

否则,您可以直接使用函数名称

直接将first属性分配给函数
function toggle() {
    if (toggle.first === true) {
        toggle.first = false;
        // function 1
    }
    else {
        toggle.first = true;
        // function 2
    }
}