[英]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循環即可創建“單位”和“山”。
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.