繁体   English   中英

JavaScript中的花括号

[英]Curly braces in Javascript

我目前正在研究Robin Nixon的Learning PHP,MySQL,Javascript,CSS和HTML5,第4版 ,并且在其中的一部分中,他解释了如何从函数中返回变量数组。

他用来证明这一点的代码是:

words = fixNames("the", "DALLAS", "CowBoys")

  for(j = 0 ; j < words.length ; ++j)
    document.write(words[j] + "<br>")

  function fixNames()
  {
    var s = new Array()

    for (j = 0 ; j < fixNames.arguments.length ; ++j)
      s[j] = fixNames.arguments[j].charAt(0).toUpperCase() +
             fixNames.arguments[j].substr(1).toLowerCase()

    return s

}

当我编写此代码时,我写了它:

words = fixNames2("the", "DALLAS", "CowBoys")
    for(j = 0; j < words.length; ++j) {
        document.write(words[j] + '<br>')
    }
    function fixNames2() {
        var s = new Array()
        for(j = 0; j < fixNames2.arguments.length; ++j) {
        s[j] = fixNames2.arguments[j].charAt(0).toUpperCase() + 
                fixNames2.arguments[j].substr(1).toLowerCase()

                return s
        }
}

我知道,在这本书的早期部分,他提到,你不需要括上花括号单个语句,我想第二for条件是2报表(以下简称s[j]部分,并return s部分) ,因此我用花括号将整个内容括起来,但是由于某种原因,以这种方式编写时,代码仅输出数组中的第一个单词(“ the”,但通过函数正确设置了格式,使其为“ The”)。

我想知道是否有人可以向我解释为什么? 难道第二for条件其实只有真正1语句? 还是与嵌套花括号的方式有关?

“返回”不是for循环的一部分(它是函数的一部分),但是您将它们包括在这些花括号内-因此,它不会按原始作者的意图起作用。

所以:

 for(j = 0; j < fixNames2.arguments.length; ++j) {
        s[j] = fixNames2.arguments[j].charAt(0).toUpperCase() + 
                fixNames2.arguments[j].substr(1).toLowerCase()

                return s //// WRONG
        }

应该:

 for(j = 0; j < fixNames2.arguments.length; ++j) {
        s[j] = fixNames2.arguments[j].charAt(0).toUpperCase() + 
                fixNames2.arguments[j].substr(1).toLowerCase() 
        }
   return s;

或者甚至可以取消括号,因为它只是for循环中的一个语句:

for(j = 0; j < fixNames2.arguments.length; ++j) 
        s[j] = fixNames2.arguments[j].charAt(0).toUpperCase() + 
                fixNames2.arguments[j].substr(1).toLowerCase();

return s;

请注意,即使它在两行中,它也应被视为一个语句,因为它应以分号结尾。

也,

s =
x
+
y
+
z;

被视为一种代码声明。 知道某事物是否被视为陈述的方法是,通常以分号结束。

始终使用分号结束语句。 不这样做(即使它运行)也是个坏习惯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM