我目前正在通过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个语句吗?或者它可能与嵌套花括号的方式有关?
答案 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;
被认为是一个代码声明。知道某些东西是否被认为是陈述的方式是它通常以分号结束。
始终使用分号结束语句。这是不好的做法(即使它运行)。