繁体   English   中英

如果前一个字符串为真,则返回假,否则为真 - javascript

[英]If previous string was true, return false, else true - javascript

因此,如果我想在函数内的字符串值的 true 和 false 之间交替,我将如何做到这一点? 我知道它与标题相似,但不确定如何将第一部分放入实际的 javascript 中。

function tfAlternate(s) {

}

所以让我们说s = “你好”

如果前一个字符串为真(在这种情况下没有前一个字符串)返回假,否则为真。

所以s是真的。

但是如果s = "goodbye"现在我希望它是假的,如果它遵循 if 语句,因为s以前是真的。

那么我该如何将其写成 if 语句呢?

希望这是有道理的,并提前致谢。

你好!

如果我理解正确,您需要一个接受字符串作为输入的函数; 并返回先前接受的字符串的布尔反转。 如果没有前一个字符串,则将前一个字符串视为假,从而使输出为真。

我同意@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

希望这可以帮助。

PS:我发现这个问题很有趣。 但是,并没有明确的措辞。 如果我对问题的解释是正确的,请告诉我; 我将编辑问题以提高清晰度。

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

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),在其中定义所有私有变量,并返回应该可以被其他代码调用的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM