首页 > 解决方案 > 在 if 条件下定义和使用函数

问题描述

我需要一个 if 语句,其中条件取决于 try-catch 是否成功。定义一个新函数只是为了调用它一次是浪费空间,我宁愿找出一个单行。

我不能使用if (try{return true;}catch{return false;}),因为它会导致 SyntaxError。因此,将“return false”视为“失败的 try-catch 尝试”。

这是尽可能短的,我可以让它在它仍然有效的地方。

// [WORKING] False as expected
if ((() => {return false})()){
    console.log("Condition is true");   
}
else{console.log("Condition is false");}

这对我来说很有意义,但我认为这不是最“官方”的方式。这种方式是一个好的解决方案吗?有没有更好的办法?

这对我有意义的原因是因为我正在检查变量是否存在,是否为数字类型并且大于 0。

if ((() => {try{return price > 0}catch{return false}})())

标签: javascriptnode.js

解决方案


问题if (try {return true;} catch {return false;})在于您试图return在函数之外使用;那里没有任何意义。

正如所有评论指出的那样,您可以按照第二个块的建议进行操作,这可能是获得这种行为的唯一合理方法。但是,正如评论所指出的,这几乎没有意义。如果它足够小以适合典型 - 条件内的单行if,那么它可能只是一个表达式,在这种情况下,您不妨只使用该表达式作为您的条件。

也就是说,而不是

if ((() => doSomething('with', 'my data'))()) {
  //...
} else 
  // ...
}

你不妨写

if (doSomething('with', 'my data')) {
  // ...
} else 
  // ...
}

if如果它不是单个表达式,那么将它放在命名函数中并在您的-condition中调用它会更有意义。

这不会施加额外的惩罚。该功能,无论是在您的条件下还是在它之外,都将占用相同数量的内存;当前范围结束时,它将有资格进行垃圾收集。(我想条件中的那个可能会更早符合条件;但我不会指望它;这当然不足以值得增加代码的复杂性。)

换句话说,这:

const myFunc = (some, args) => {
  const step1 = doSomething('with' args);
  const step2 = doAnotherThing('with', step1, 'and', some, args);
  return doAThirdThing('with', step2)
}

if (myFunc('my', 'data')) {
  //...
} else {
  // ...
}

if (((some, args) => {
  const step1 = doSomething('with' args);
  const step2 = doAnotherThing('with', step1, 'and', some, args);
  return doAThirdThing('with', step2)
})('my', 'data')) {
  //...
} else {
  // ...
}

我向你保证,你以后会感谢自己没有做后者。


推荐阅读