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式。
但是你应该记住:
- 在JavaScript
var
语句是函数作用域。 - Javascript中有一个“提升”行为。
- 由于1,2以及稍后的代码重构,您可以轻松地将错误引入此代码。
- 在Javascript 中input强制是有点混乱 。
- 带有副作用的代码,其中一个操作可能同时导致2个不同的逻辑结果 – 真的很难。
我会考虑至less使用严格的比较运算符: if (spelledWord = spellCheck(word) !== '')
如果可能,尝试记忆(caching)来自调用spellCheck
函数的结果。 在这种情况下,你根本不需要把两个操作合并成一个操作。