0

我在 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(){}
4

3 回答 3

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
于 2013-11-09T00:52:18.203 回答
0

返回一个新函数

var foo = (function(){
    var condition
         , body
    body = function () {
        if(condition){
             //thing here
        } else {
            //other things here
        }
    }
    return body
}())` 
于 2013-11-09T00:23:00.043 回答
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
    }
}
于 2015-12-03T07:37:26.640 回答