Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数在for循环第一次运行后返回undefined_Javascript - Fatal编程技术网

Javascript函数在for循环第一次运行后返回undefined

Javascript函数在for循环第一次运行后返回undefined,javascript,Javascript,我有一个关于循环和变量的基本问题。我有以下代码: function fiveLine(s){ let trim=s.trim() let fulltrim; for (let i=1; i<=5; i++){ fulltrim+="\n"+trim.repeat(i) } return fulltrim } 除了输出“未定义”之外,它的工作方式完全符合我的要求。我知道在for循环更新变量fulltrim之前会访问并返回它,但我不明白为什

我有一个关于循环和变量的基本问题。我有以下代码:

function fiveLine(s){
  let trim=s.trim()
  let fulltrim;

  for (let i=1; i<=5; i++){
  fulltrim+="\n"+trim.repeat(i)
  
  }
  return fulltrim
}
除了输出“未定义”之外,它的工作方式完全符合我的要求。我知道在for循环更新变量fulltrim之前会访问并返回它,但我不明白为什么。换句话说,我不明白为什么输出不正确

aaa
aaaaaa
aaaaaaaaa
aaaaaaaaaaaa
aaaaaaaaaaaaaaa

对我来说,变量fulltrim在第一次返回时已经被For循环更新了,因此它不应该再被未定义了。谢谢你的阅读

fulltrim在i为1时未定义,这就是它打印未定义的原因

使用空字符串初始化fulltrim

let fulltrim = '';
功能五线{ 让trim=s.trim 让fulltrim=; 对于let i=1;ifulltrim在i为1时未定义,这就是它打印未定义的原因

使用空字符串初始化fulltrim

let fulltrim = '';
功能五线{ 让trim=s.trim 让fulltrim=;
对于let i=1;i您需要初始化fulltrim

 function fiveLine(s){
      let trim=s.trim()
      let fulltrim= "";
    
      for (let i=1; i<=5; i++){
      fulltrim+="\n"+trim.repeat(i)
      
      }
      return fulltrim
    }

您需要初始化fulltrim

 function fiveLine(s){
      let trim=s.trim()
      let fulltrim= "";
    
      for (let i=1; i<=5; i++){
      fulltrim+="\n"+trim.repeat(i)
      
      }
      return fulltrim
    }
fulltrim;未设置为任何值,因此JS将其视为未定义。 要防止第一次连接导致第一个空行\n,请改用fulltrim=[]和fulltrim.pushs.repeati。 最后返回fulltrim.join\n; 功能五线{ s=s.trim; 常数fulltrim=[]; 对于let i=1;i fulltrim;未设置为任何值,因此JS将其视为未定义。 要防止第一次连接导致第一个空行\n,请改用fulltrim=[]和fulltrim.pushs.repeati。 最后返回fulltrim.join\n; 功能五线{ s=s.trim; 常数fulltrim=[];
对于let i=1;该代码不初始化fulltrim。使用let fulltrim=;。该代码不初始化fulltrim。使用let fulltrim=;。因此,基本上,首先值“fulltrim”未初始化,这就是它返回“undefined”的原因。但是在该代码初始化之后,fulltrim将使用值“undefined”进行初始化,因此它将按照预期工作?只是尝试一下要真正了解正在发生的事情,您知道。感谢您和所有其他人!请参阅更新的答案,了解在每次迭代中如何更新fulltrim的详细信息。基本上,“fulltrim”在初始化失败时第一次尝试后获得“undefined”值。因此,该值已初始化,因为它现在的值为“undefined”?随后它将按预期工作。我完全理解其他一切,但不知道为什么for循环最终会工作。希望你能按照我的想法。因此,基本上,首先值“fulltrim”没有初始化,这就是它返回“undefined”的原因。但在那之后,fulltrim用值“undefined”初始化,因此它以后会按预期工作?只是t正在努力真正了解发生了什么,你知道。谢谢你,也感谢大家!请参阅更新的答案,了解在每次迭代中如何更新fulltrim的详细信息。基本上,初始化失败时,第一次尝试后,“fulltrim”会得到“undefined”值。因此,该值已初始化,因为它现在的值为“undefined”?随后我完全理解其他的一切,但我想知道为什么for循环最终会起作用。希望你能跟随我的想法。