Javascript语法 – 如果语句和函数调用

我有一个语法问题,可以说我有以下function。 它收到了拼写检查的文本,并返回正确的文本或假的文本已经拼写正确的情况下。

var spellCheck = function (txt) { var spelledTxt = spell(txt); if (spelledTxt =! txt) { //the text had a typo. return spelledTxt; } return false; } 

现在在一个不同的函数中,我想从一个ElseIf语句中调用这个函数,并且我只想在文本中有一个错误被纠正的情况下进入该语句。 就像是:

 if(something){ do something.... }else if(spellCheck(word)){ do something with the spelledTxt that was returned from "spellcheck" } 

我可以做:

 else if(var spelledWord = spellCheck(word)) do something with spelledWord. 

我忘了一件非常重要的事情: spellCheck(word)function非常沉重,如果不需要,我想避免调用它。 这意味着只有当我们到达else if() ,才会被调用,而不是更早。

任何expression式在if语句内都是有效的,并且包含赋值expression式。 赋值expression式的值是赋值。

在你的情况下,函数调用的返回值是expression式的值,但是var使它成为一个语句而不是一个简单的expression式。

您需要从声明中删除variables声明部分,然后就可以了。

或者,你可以简单地这样做:

 else { var spelledWord = spellCheck(word); if(spelledWord) do something with spelledWord } 

你可以做到这一点。 赋值操作返回一个值,您可以将其用作布尔expression式。

但是你应该记住:

  1. 在JavaScript var语句是函数作用域。
  2. Javascript中有一个“提升”行为。
  3. 由于1,2以及稍后的代码重构,您可以轻松地将错误引入此代码。
  4. 在Javascript 中input强制是有点混乱 。
  5. 带有副作用的代码,其中一个操作可能同时导致2个不同的逻辑结果 – 真的很难。

我会考虑至less使用严格的比较运算符: if (spelledWord = spellCheck(word) !== '')如果可能,尝试记忆(caching)来自调用spellCheck函数的结果。 在这种情况下,你根本不需要把两个操作合并成一个操作。