Javascript 在if条件下定义和使用函数
我需要一个if语句,其中条件取决于try-catch的成功。定义一个新函数只调用一次是浪费空间的,我更愿意用一行代码 我不能使用Javascript 在if条件下定义和使用函数,javascript,node.js,Javascript,Node.js,我需要一个if语句,其中条件取决于try-catch的成功。定义一个新函数只调用一次是浪费空间的,我更愿意用一行代码 我不能使用if(try{return true;}catch{return false;}),因为它会导致语法错误。因此,将“return false”视为“尝试捕获失败” 这是我所能做到的最短的地方了 // [WORKING] False as expected if ((() => {return false})()){ console.log("Conditi
if(try{return true;}catch{return false;})
,因为它会导致语法错误。因此,将“return false”视为“尝试捕获失败”
这是我所能做到的最短的地方了
// [WORKING] False as expected
if ((() => {return false})()){
console.log("Condition is true");
}
else{console.log("Condition is false");}
这对我来说很有意义,但我不认为这是最“正式”的方式。这是个好办法吗?有更好的办法吗
这对我来说有意义的原因是,我正在检查变量是否存在,类型是否为number,并且是否大于0
if((()=>{try{return price>0}catch{return false}})()
if(try{return true;}catch{return false;})的问题在于您试图在函数外部使用return
;在那里没有任何意义
正如所有评论所指出的,你可以按照你的第二块建议去做,这可能是获得这种行为的唯一合理途径。但是,正如评论所指出的,这没有什么意义。如果它足够小,可以在一个典型的If
-条件中容纳一行,那么它可能只是一个表达式,在这种情况下,您最好使用该表达式作为条件
也就是说,而不是
if((()=>doSomething('with','my data'))()){
//...
}否则
// ...
}
你不妨写一封信
if(doSomething('with','my data')){
// ...
}否则
// ...
}
如果它不是一个单独的表达式,那么将它放在一个命名函数中并在If
-条件中调用它会更有意义
这不会造成额外的处罚。这个函数,无论是在你的条件下还是在它之外,都会占用相同的内存量;当当前作用域结束时,它将有资格进行垃圾收集。(我猜条件中的一个可能会更快地符合条件;但我不会指望它;它肯定不足以增加代码的复杂性。)
换言之,这:
constmyfunc=(一些,参数)=>{
const step1=剂量测量('with'args);
const step2=doAnotherThing('with',step1',and',some,args);
返回第三步('with',step2)
}
if(myFunc('my','data')){
//...
}否则{
// ...
}
比以前更干净、可读性更强
if((部分,参数)=>{
const step1=剂量测量('with'args);
const step2=doAnotherThing('with',step1',and',some,args);
返回第三步('with',step2)
})('my','data')){
//...
}否则{
// ...
}
我向你保证,你以后会感谢你自己没有做后者。如果(try{return true;}catch{return false;})
的问题是你试图在函数外部使用return
;在那里没有任何意义
正如所有评论所指出的,你可以按照你的第二块建议去做,这可能是获得这种行为的唯一合理途径。但是,正如评论所指出的,这没有什么意义。如果它足够小,可以在一个典型的If
-条件中容纳一行,那么它可能只是一个表达式,在这种情况下,您最好使用该表达式作为条件
也就是说,而不是
if((()=>doSomething('with','my data'))()){
//...
}否则
// ...
}
你不妨写一封信
if(doSomething('with','my data')){
// ...
}否则
// ...
}
如果它不是一个单独的表达式,那么将它放在一个命名函数中并在If
-条件中调用它会更有意义
这不会造成额外的处罚。这个函数,无论是在你的条件下还是在它之外,都会占用相同的内存量;当当前作用域结束时,它将有资格进行垃圾收集。(我猜条件中的一个可能会更快地符合条件;但我不会指望它;它肯定不足以增加代码的复杂性。)
换言之,这:
constmyfunc=(一些,参数)=>{
const step1=剂量测量('with'args);
const step2=doAnotherThing('with',step1',and',some,args);
返回第三步('with',step2)
}
if(myFunc('my','data')){
//...
}否则{
// ...
}
比以前更干净、可读性更强
if((部分,参数)=>{
const step1=剂量测量('with'args);
const step2=doAnotherThing('with',step1',and',some,args);
返回第三步('with',step2)
})('my','data')){
//...
}否则{
// ...
}
我向你保证,你以后会感谢自己没有做后者。为什么?为什么不直接执行函数的内容呢?我不理解在执行
if
时构造函数的必要性。(1)函数是真实的。(2) 在第二个版本中有一个隐式全局变量。(3) 这是一个xy问题。你到底想做什么?如果((function(){return true;}())
可以工作。实际上这样做是没有意义的。总的来说,生活是一种合理的方式来做这么短和做作的事情。在很少的情况下,这是有意义的——在其他地方创建函数,并使其能够对代码进行推理。这仍然是一个XY的问题,因为它没有任何意义。让你的JS可读,你会感谢自己以后…为什么?为什么不直接执行函数的内容呢?我不理解在执行if
时构造函数的必要性。(1)函数是真实的。(2) 在第二个版本中有一个隐式全局变量。(3) 这是一个xy问题。你到底想做什么?如果((function(){return true;}())
可以工作。事实上,这样做是没有意义的