Javascript嵌套范围

时间:2014-05-17 03:33:46

标签: javascript function nested

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 += "'"; //this statement comes first so ,"'" should print first 
    result += "\\"; //Then this should print "\"

/*
loop will run 4 times. it should print /'\'\'\' to my understanding.
*/



  };

  flat(3);

  mountain(4);

  flat(6);

  mountain(1);

  flat(1);

  return result;
};

console.log(landscape());

为什么要返回:_ _ _ / ' ' ' ' \\_ _ _ _ _ _/ ' \\ _

我认为它应该如何回归:_ _ _ / ' \ ' \ ' \ ' \ _ _ _ _ _ _ / ' \ _

请帮助我理解为什么会这样回来?

2 个答案:

答案 0 :(得分:4)

\mountain()只显示一次,因为它不会在for循环内重复。

循环只使用它后面的第一个语句,类似于:

for (var count = 0; count < size; count++) {
  result += "'";  // appended for each `count`
}
result += "\\";   // appended once after the loop has completed

要实现您期望的输出,必须在两个语句周围添加一个块,以便它们一起重复:

for (var count = 0; count < size; count++) {
  result += "'";
  result += "\\";
}

答案 1 :(得分:3)

它不会返回'\'\'\,因为\仅在for循环完成后打印。如果大括号不与for循环一起使用,它将仅使用以下指令。在这种情况下,它只使用result += "'"指令而不是result += "\\"指令。

所以,用语言来说,你的山(4)功能正在说:

  1. 添加/
  2. 添加4 '
  3. 添加\