如果上一个字符串为true,则返回false,否则为true-javascript



那么,如果我想在函数中的字符串值的true和false之间交替,我该怎么做呢?我知道它与标题相似,但不知道如何将第一部分放入实际的javascript中。

function tfAlternate(s) {
}

所以让我们说s="你好"

如果前一个字符串为true(在本例中没有前一个串),则返回false,否则为true。

因此s将为真。

但是如果s="再见"现在我希望它是false,如果它遵循if语句,因为s以前是true。

那么我该如何把它写成if语句呢?

希望这是合理的,并提前感谢。

如果我理解正确的话,你需要一个接受字符串作为输入的函数;并返回先前接受的字符串的布尔倒数。如果没有前一个字符串,则表现为前一个串为false,从而使输出为true。

我同意@CD的观点。。和@Felix King。您需要跟踪上一个字符串。

但是,与其在函数本身上使用全局变量或属性,我建议使用闭包:

var tfAlternate = (function () {
    var previousStr = null;     // False value, for no previous string.
    return function (s) {
        var ans = !previousStr; // Negate previous string. 
        previousStr = s;        // Current string is the next previous string.
        return ans;             // Return negated previous string.
    };
}());

将上述代码粘贴到浏览器的控制台中;并在试驾时接受:

tfAlternate("Hello");   // true,  because !null is true
tfAlternate("goodbye"); // false, because !"Hello" is false
tfAlternate("foo");     // false, because !"goodbye" is false
tfAlternate("");        // false, because !"foo" is false
tfAlternate("bar");     // true,  because !"" is true
tfAlternate("baz");     // false, because !"bar" is false

希望这能有所帮助

附言:我觉得这个问题很有趣。然而,它的措辞并不明确。如果我对这个问题的解释是正确的,请告诉我;我将编辑这个问题以提高清晰度。

您必须以某种方式在函数调用之间保持状态。有多种方法可以做到这一点。一种是将状态保持在一个变量中:

var previous = false;
function tfAlternate() {
  return (previous = !previous);
}

然而,在这里,previous在函数之外是可访问的,并且污染了范围。事实上,我们使用previous更多的是该函数的一种实现。我们可以通过创建一个新的作用域来保持它的"私有",并让函数关闭它:我们创建一个闭包

var tfAlternate = (function() { // IIFE: Immediately Invoked Function Expression
  var previous = false;
  return function tfAlternate() { // name is optional, but helps with debugging
    return (previous = !previous);
  };
}());

在JavaScript中,作用域主要由函数创建,因此我们调用一个函数来创建作用域(IIFE),定义其中的所有私有变量,并返回应该由其他代码调用的函数。

最新更新