2016-02-02 56 views
0

我目前正在使用Robin Nixon的Learning PHP, MySQL, Javascript, CSS & HTML5, 4th Edition,並且我介紹瞭如何從函數返回一個變量數組。Javascript中的大括號

他用來證明這一點的代碼是:

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個語句?或者它可能與我嵌套花括號的方式有關?

+1

你的'return'語句在'for'循環中,所以只有循環的第一次迭代在它返回之前執行。 –

+1

一旦你點擊了'return'語句,你的方法就滿足了,所以算法結束了。如果將它移到循環外面,它將按預期運行。 –

+1

是的。第二個'for'循環的目的是在其中只有一個語句 - 這就是爲什麼它不使用大括號。通過在for循環中放入'return'來改變程序。 – nobar

回答

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; 

被認爲是一個代碼語句。知道某件事是否被認爲是一種陳述的方式是它通常以分號結尾。

總是使用分號來結束語句。不要(即使它運行)不好的做法。

+0

啊,所以就是這樣。現在完美。 :) 謝謝! – cloud4xL