有人可以向我解释为什么我们需要在此函数中使用 for 循环吗?
Can somebody explain to me why we need a for loop in this function?
我对编程比较陌生,今天正在读这本书,Eloquent Javascript。我遇到了一个与整体范围相关的例子。但是,我更感兴趣的是了解它们提供的功能中的所有元素。
函数如下:
var landscape = function () {
var result = "";
var flat = function (size) {
for (var count = 0; count < size; count++)
result += "_";
};
var mountain = function (size) {
result += "/";
for (var count = 0; count < size; count++)
result += "'"
result += "\"
};
flat(3);
mountain(4);
flat(6);
mountain(1);
return result;
};
console.log(landscape());
当我试图分解这个函数时,除了 for 循环之外,我几乎理解了所有的东西。我不确定为什么这个函数需要它们,并且想知道是否有人愿意为我消化这个问题,并解释为什么我们需要 for 循环来使函数正常工作。
现在你得到输出:
___/''''\______/'\
如果没有它们,您将得到两个如下所示的函数(简化版):
var flat = function(size){
result += "_";
};
var mountain = function(size){
result += "/'\";
};
因此你会得到输出
_/'\_/'\
flat()
的size
参数定义了应该输出多少个下划线,mountain
的size
参数定义了多少个单引号('
) 应该输出。
因此你需要循环,否则你会得到更小的山脉和平原。
考虑下面的 "drawing",其中 F
为 "flat",M
为 "mountain":
___/''''\______/'\
FFFMMMMMMFFFFFFMMM
每座山总是至少有 3 个字符长(因为它输出一个正斜杠,至少一个 '
,然后是一个反斜杠)。这意味着上面的输出是(连同你的代码)
3 x F = 3 flats | flats(3)
6 x M = (6 - 2) = 4 mountains | mountain(4)
6 x F = 6 flats | flats(6)
3 x M = (3 - 2) = 1 mountain | mountain(1)
重申一下:
// define an anonymous function with a "size" parameter and save it as "flat"
var flat = function (size) {
// start "count" at 0 (count = 0) and add 1 to "count" (count++) while "count" is less than "size" (count < size)
for (var count = 0; count < size; count++) {
// Add an underscore to the "result" variable
result += "_";
}
};
// define an anonymous function with a "size" parameter and save it as "mountain"
var mountain = function (size) {
// Add a forward slash to the "result" variable
result += "/";
// start "count" at 0 (count = 0) and add 1 to "count" (count++) while "count" is less than "size" (count < size)
for (var count = 0; count < size; count++) {
// Add a single quote to the "result" variable
result += "'";
}
// Add a backwards slash to the "result" variable
result += "\"
};
如果你问是因为
if (foo)
bar();
oof();
你觉得很奇怪,那么总是认为像这样的单行条件类似于
if (foo) {
bar();
}
oof();
就像另一个答案中所说的那样,for循环用于将字符连接指定的次数。我想指出你不需要 for 循环来使你的 "flats" 和 "mountains".
var landscape = function () {
var result = "";
var flat = function (size) {
result += Array(size+1).join("_");
};
var mountain = function (size) {
result += "/";
result += Array(size+1).join("'");
result += "\";
};
flat(3);
mountain(4);
flat(6);
mountain(1);
return result;
};
console.log(landscape());
我对编程比较陌生,今天正在读这本书,Eloquent Javascript。我遇到了一个与整体范围相关的例子。但是,我更感兴趣的是了解它们提供的功能中的所有元素。
函数如下:
var landscape = function () {
var result = "";
var flat = function (size) {
for (var count = 0; count < size; count++)
result += "_";
};
var mountain = function (size) {
result += "/";
for (var count = 0; count < size; count++)
result += "'"
result += "\"
};
flat(3);
mountain(4);
flat(6);
mountain(1);
return result;
};
console.log(landscape());
当我试图分解这个函数时,除了 for 循环之外,我几乎理解了所有的东西。我不确定为什么这个函数需要它们,并且想知道是否有人愿意为我消化这个问题,并解释为什么我们需要 for 循环来使函数正常工作。
现在你得到输出:
___/''''\______/'\
如果没有它们,您将得到两个如下所示的函数(简化版):
var flat = function(size){
result += "_";
};
var mountain = function(size){
result += "/'\";
};
因此你会得到输出
_/'\_/'\
flat()
的size
参数定义了应该输出多少个下划线,mountain
的size
参数定义了多少个单引号('
) 应该输出。
因此你需要循环,否则你会得到更小的山脉和平原。
考虑下面的 "drawing",其中 F
为 "flat",M
为 "mountain":
___/''''\______/'\
FFFMMMMMMFFFFFFMMM
每座山总是至少有 3 个字符长(因为它输出一个正斜杠,至少一个 '
,然后是一个反斜杠)。这意味着上面的输出是(连同你的代码)
3 x F = 3 flats | flats(3)
6 x M = (6 - 2) = 4 mountains | mountain(4)
6 x F = 6 flats | flats(6)
3 x M = (3 - 2) = 1 mountain | mountain(1)
重申一下:
// define an anonymous function with a "size" parameter and save it as "flat"
var flat = function (size) {
// start "count" at 0 (count = 0) and add 1 to "count" (count++) while "count" is less than "size" (count < size)
for (var count = 0; count < size; count++) {
// Add an underscore to the "result" variable
result += "_";
}
};
// define an anonymous function with a "size" parameter and save it as "mountain"
var mountain = function (size) {
// Add a forward slash to the "result" variable
result += "/";
// start "count" at 0 (count = 0) and add 1 to "count" (count++) while "count" is less than "size" (count < size)
for (var count = 0; count < size; count++) {
// Add a single quote to the "result" variable
result += "'";
}
// Add a backwards slash to the "result" variable
result += "\"
};
如果你问是因为
if (foo)
bar();
oof();
你觉得很奇怪,那么总是认为像这样的单行条件类似于
if (foo) {
bar();
}
oof();
就像另一个答案中所说的那样,for循环用于将字符连接指定的次数。我想指出你不需要 for 循环来使你的 "flats" 和 "mountains".
var landscape = function () {
var result = "";
var flat = function (size) {
result += Array(size+1).join("_");
};
var mountain = function (size) {
result += "/";
result += Array(size+1).join("'");
result += "\";
};
flat(3);
mountain(4);
flat(6);
mountain(1);
return result;
};
console.log(landscape());