Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.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/else语句问题_Javascript - Fatal编程技术网

基本Javascript if/else语句问题

基本Javascript if/else语句问题,javascript,Javascript,我正在查看以下Javascript代码,试图将其移植到另一种语言: if (x>n) {return q} {return 1-q) 我不知道代码在做什么,但是有人能根据语法告诉我发生了什么吗?在最后一组{}之前是否有一个隐含的“else”?也就是说,如果x>n,则返回q,否则返回1-q 如果有帮助,下面是嵌入其中的代码行: if(x>9000 | n>6000) { var q=Norm((Power(x/n,2/5)+1/(8*n)-1)/Sqrt(9/(2*n)))/3

我正在查看以下Javascript代码,试图将其移植到另一种语言:

if (x>n) {return q} {return 1-q)
我不知道代码在做什么,但是有人能根据语法告诉我发生了什么吗?在最后一组{}之前是否有一个隐含的“else”?也就是说,如果x>n,则返回q,否则返回1-q

如果有帮助,下面是嵌入其中的代码行:

if(x>9000 | n>6000) { var q=Norm((Power(x/n,2/5)+1/(8*n)-1)/Sqrt(9/(2*n)))/3; if (x>n) {return q}{return 1-q} }
谢谢

基本上是这样的:

if (x>n)
   return q; 
else 
   return 1-q;

还有一种暗示。如果x>n,则函数返回q。否则,它将转到下一个return语句并返回1-q。

没有隐含的“else”,下一组大括号只是定义了另一个复合语句。在本例中,它的行为类似于“else”,但这只是因为“if”部分包含一个return语句。

该代码实际上是

if (x > 9000 | n > 6000) {
    var q = Norm((Power(x / n, 2 / 5) + 1 / (8 * n) - 1) / Sqrt(9 / (2 * n))) / 3;
    if (x > n) {
        return q
    } {
        return 1 - q
    }
}

要么有人认为不可读的代码是个好主意,要么他们使用了一个不好的minifer。

返回q
之后的{}块是不必要的。这里没有暗示任何其他语句,只是如果它通过if语句并返回q,接下来的内容将不再执行,否则,它将执行。那么就不需要在那里放置else了。

这里只有一个隐含的else,因为与
if
语句配对的块从函数返回。您发布的代码相当于:

if(x > n)
{
    return q;
}
return q + 1;
您只能获得if/else-like行为,因为第二条语句只能在第一条语句没有执行的情况下执行(因为第一条语句将从函数返回,而控件永远不会到达第二条语句)

这个坏代码!对于可读性/可维护性/健全性,应采用以下更可持续的格式之一编写:

if(x > n) {return q;}
else      {return q + 1;}
或:


希望有帮助

@Jacob Relkin它可能来自一个压缩的java脚本库,即抛出所有空格和换行符以最小化文件大小。@SemVanmeenen但它没有抛出所有无意义的空格:PUnless我不知道有什么东西,在我看来,代码好像被破坏了。弹出打开firebug控制台:
如果(1>2){1}{2}
打印了2个,一切正常<代码>如果(3>2){1}{2}打印2。。。好的
如果(3>2){1}else{2}
打印1.yah,整个代码库就是这样。@Alex哦,对了。只是扫了一眼,回答得很漂亮。很简单,不是真的!只有当
if
块返回时,它才会正常工作。如果(x>n){x+=12}{x+=7},那么其他任何东西的行为都将完全不同。没有一个隐含的
else
@Xavier-它是用
返回的
.True,但我认为这是一个危险的答案,它回答了更一般的问题“如果(x){block-1}{block-2}
作为
如果(x){block-1}else{block-2}
”你在这个特定的情况下是正确的,但从全局来看,这个假设是正确的(你的答案似乎是这样的)会在
block-1
没有
return
语句时咬到你。说“隐含的其他”有点误导性。如果
If
子句中没有
return
,当测试结果为true时,这两个子句都将被执行。请参阅第一个返回的代码,如果If语句为false,则第二个返回将仅在If语句为false时到达。因此,else的含义。这在风格上很糟糕,但他要求的是含义-如果代码执行会发生什么。我希望他的重写会更好。;-)
return (x > n)? q : q + 1;