繁体   English   中英

有人可以向我解释为什么我们需要在此函数中使用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参数定义应输出多少个下划线,而mountainsize参数定义应输出多少个单引号( ' )。

因此,您需要循环,否则您将得到较小的山脉和平坦的土地。

考虑下面的“图形”,其中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循环即可创建“单位”和“山”。

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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM