Javascript

时间:2016-02-02 02:30:29

标签: javascript

我目前正在通过Robin Nixon的Learning PHP, MySQL, Javascript, CSS & HTML5, 4th Edition工作,而我正在解释如何从函数中返回一组变量。

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

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个语句({{1部分和s[j]部分),所以我用花括号包围整个事物,但由于某种原因,当用这种方式编写时,代码只输出数组中的第一个单词(&#39;& #39;,但由函数正确格式化,以便&#39;'&#39;)。

我想知道是否有人可以向我解释这是为什么?是第二个return s条件实际上只是实际上是1个语句吗?或者它可能与嵌套花括号的方式有关?

1 个答案:

答案 0 :(得分:1)

“return”不是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;

被认为是一个代码声明。知道某些东西是否被认为是陈述的方式是它通常以分号结束。

始终使用分号结束语句。这是不好的做法(即使它运行)。