Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在if条件下定义和使用函数_Javascript_Node.js - Fatal编程技术网

Javascript 在if条件下定义和使用函数

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-catch的成功。定义一个新函数只调用一次是浪费空间的,我更愿意用一行代码

我不能使用
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;}())
可以工作。事实上,这样做是没有意义的