具有单一功能的 JavaScript 三角形

Posted

技术标签:

【中文标题】具有单一功能的 JavaScript 三角形【英文标题】:JavaScript triangle with single function 【发布时间】:2018-02-05 01:45:11 【问题描述】:

我正在使用 javascript 制作三角形,通常我不得不使用 2 个函数来制作一个。不过,我最近尝试创建一个具有单个功能的功能,并且效果很好。但我不确定为什么或如何在每次运行 for 循环后开始一个新行,因为我从未在单个函数的代码中的任何地方提到“\n”。谁能解释为什么它仍然有效?谢谢。

    function tri(num)
  var star = '';
  for(var i = 1; i <= num; i++)
    var star = star + " *";
    console.log(star)
  

tri(10)

这是我使用 2 个函数的方法

    function horiztonal(num)
  var star = "";
  for(var i = 0; i <= num; i++)
    var star = star + " *"
  
  console.log(star)



function buildTri(num)
  var star = "";
  for(var i = 0; i < num; i++)
    var star = star + horiztonal(i)
  
  console.log(star)


buildTri(10)

在运行 2 次函数尝试后,还有一串重复的“未定义”,所以如果有人能解释一下,我真的很感激。再次感谢。

【问题讨论】:

您通常不应该努力将两个功能合二为一。一般来说,只要你有良好的结构,功能越多越好。而且你不应该在任何一个函数中使用console.log;那只会让人头疼。这两个函数都应该返回一个可以稍后打印的字符串。 console.log 在输出末尾插入一行回车 【参考方案1】:

打印“未定义”的原因是您混淆了返回字符串的函数和写入 console.log() 的函数。如果你仔细研究,horizo​​ntal(),你会看到它正在写入控制台......没有返回值。但是,如果您仔细研究 tri() 函数,您会发现它期望 Horizo​​ntal() 返回一个字符串。即两个假设不一致。因此,您得到的行为是 console.log 的输出以及 undefined 的连接,因为您的函数没有返回任何值。

我做了以下整改:

horizontal()返回星星行 删除过度使用var 关键字。你到处都有var star,而且,真的,你声明了一次,然后到处使用它 现在我们正在返回字符串,我必须在字符串中添加一个换行符(在 console.log 为您提供免费换行符之前) 我做了一些小的格式和间距调整 将变量从 star 重命名为 stars(为了正确起见,因为字符串将包含星号集合)

function horiztonal(num) 
  var stars = "";
  for (var i = 0; i <= num; i++) 
    stars = stars + " *"
  
  return stars;



function buildTri(num) 
  var stars = "";
  for (var i = 0; i < num; i++) 
    stars = stars + horiztonal(i) + "\n";
  
  console.log(stars)


buildTri(10);

【讨论】:

谢谢先生!这是解释未定义问题的好方法。也感谢代码清理。从现在开始,我会记住这些提示。【参考方案2】:
    Console.log 打印您在每次迭代中传递的参数 函数返回未定义。 console.log 没有明确返回任何内容。

也许这个例子会有所帮助。

function tri(num)
  var star = '';
  for(var i = 1; i <= num; i++)
    var star = star + " *";
    console.log(star)

  
     return "Finished"; //explicitly returning

tri(10)

现在我们显式地返回一个值。

【讨论】:

@Carcigenicate 的重点是表明他应该根据他的上下文明确返回 - 如果他不想看到 undefined 话虽如此,如果我可以放弃我的答案,我会的。自从斯蒂芬全给出了更彻底的答案。下次我会避免回答,除非答案是彻底的。

以上是关于具有单一功能的 JavaScript 三角形的主要内容,如果未能解决你的问题,请参考以下文章

opengl绘图,画一个旋转的四边形和一个旋转的三角形,平滑着色和单一着色

JavaScript设计模式中的单一职责原则

JavaScript设计模式中的单一职责原则

具有单一特征的梯度下降中的特征缩放

JavaScript 学习

如何在 Javascript 中制作可拉伸的聊天气泡?