因此,如果我想在函数中的字符串值之间交替使用true和false,我将如何做到这一点?我知道它与标题类似但不确定如何将第一部分放入实际的javascript中。
function tfAlternate(s) {
}
让我们说 s = “你好”
如果前一个字符串为true(在这种情况下没有前一个字符串)返回false,否则为true。
所以 s 会是真的。
但是如果 s = “再见”现在我希望它是假的,如果它遵循if语句,因为 s 之前是真的
那我怎么能把它写成if语句?
希望这是有意义的,并提前感谢。
答案 0 :(得分:1)
你好!
如果我理解正确,你需要一个接受字符串作为输入的函数;并返回先前接受的字符串的布尔反转。如果没有前一个字符串,则表现为前一个字符串为false,从而使输出成为真。
我同意@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:我发现这个问题非常有趣。但是,措辞不明确。如果我对这个问题的解释是正确的,请告诉我;我会编辑问题以提高清晰度。
答案 1 :(得分:0)
你不得不在函数调用之间保持状态。有多种方法可以做到这一点。一种是将状态保持在变量中:
var previous = false;
function tfAlternate() {
return (previous = !previous);
}
但是,此处previous
可在函数外部访问,并污染范围。我们使用previous
这一事实更多的是函数的实现。我们可以保持"私人"通过创建一个新的范围并使函数靠近它:我们创建一个closure。
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),定义其中的所有私有变量,并返回应该由其他代码调用的函数。