有人能向我解释一下为什么我们在这个函数中需要一个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循环外,我基本上理解了所有内容。我不确定为什么这个函数需要它们,我想知道是否有人愿意为我消化这个问题,并解释为什么我们需要循环来使函数正常工作。
现在您得到的输出是:
___/'''''______/''
如果没有它们,你会得到两个看起来像这样的函数(简化):
var flat = function(size){
result += "_";
};
var mountain = function(size){
result += "/'''";
};
因此,你会得到输出
_/''_/''
flat()
的size
参数定义应输出多少下划线,mountain
的size
参数定义应输入多少单引号('
)。
因此,你需要环,否则你会得到更小的山脉和平地。
考虑以下"图纸",其中F
为"平面",M
为"山脉":
___/'''''______/''
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循环来制作你的"平面"answers"山脉"。
jsfiddle演示
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());
相关文章:
- Chrome/jQuery未捕获范围错误:超过了最大调用堆栈大小(函数循环)
- 如何在返回值(Js)时不中断函数/循环
- 函数在自己的循环中使用 i,以及一个子函数循环 - var 的行为类似于 let
- 我可以在 jquery 中对函数循环使用相同的返回值吗?
- 如何使用 each() 函数循环访问 JSON 文件
- jQuery函数循环两次
- setInterval 函数循环太快
- 简化我的函数(循环、数组)
- 我的 IF 条件如何影响全局变量使函数循环
- 使用ReactJS和concatJSX语法进行渲染时的map函数循环
- 如何通过OnClick函数循环遍历标记元素并在显示器上获得相应的内容
- 函数循环问题
- 将计数器添加到javascript函数循环中
- 通过future函数循环和设置全局变量
- jQuery创建一个函数循环,每个函数都有一个动画队列
- 从另一个函数终止一个活动的javascript函数/循环
- jQuery函数循环:为什么夏奇拉在陌生人吻她时重复吻
- 在一个简单的函数循环中设置style.display时出现了奇怪的行为
- 通过多个函数循环/setinterval
- 试图防止Jquery函数循环