gpt4 book ai didi

javascript - 如何在函数内部(在函数上)执行 for 循环?

转载 作者:行者123 更新时间:2023-11-28 11:55:43 25 4
gpt4 key购买 nike

我正在努力用纯 JavaScript 创建一个通用的“lorem ipsum”生成器。我已经设法让它工作到从数组中的小写字符串数组中提取的程度,用空格将它们连接起来,将第一个大写并在末尾添加一个句点。

我还设置了一个点,将这些句子插入更大的数组并连接到一个段落中。但是,我无法在函数内部多次循环生成句子和数组。对全局函数的多次调用将导致将生成的最后一个句子附加到段落中,但是我希望能够生成随机数量的句子,并在每次后续调用全局函数时将它们推送到数组(并且将来,使用相同的模式生成随机数量的段落)。

也许很明显我做错了什么,但我认为在句子生成函数的全局函数内部调用 for 循环是可行的。

<!DOCTYPE html>

<html>
<head>
<script type="text/javascript" src="ipsum.js"></script>
<title>Generic Ipusm</title>
</head>
<input type="button" id="make" value="Make" onclick="makeParagraphs();" />
<p id="message" >Click to generate!</p>

<body>
</body>
</html>

这是我的 JavaScript:

function capitalize(string) {
return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
}
var arr = [];
var arr = ["this","array","of","random","words"];
var paragraph = [];

function makeParagraphs() {

var message = [];
var sentence;

var paragrapher = paragraph.join(" ");
console.log("p: " + paragrapher);
var makeSentences = function() {

r = Math.floor(Math.random() * 10) + 5; // Words in sentence range
for (i=1; i<=r; i++) {

var random = arr[Math.floor(Math.random() * arr.length)];
message.push(random);
var words = message.join(" ") + ".";
var sentencer = capitalize(words);
document.getElementById("message").innerHTML = sentencer;


}
var sentence = sentencer;
console.log("s: " + sentence);
paragraph.push(sentence);

}
for (i=1; i<=4; i++) {
makeSentences();
}
}

循环中的最后一个调用是我尝试生成 4 个句子并将其推送到该段落。语言是否存在限制,阻止我像这样多次调用函数?

这是一个 fiddle (请记住,我正在将段落结果记录到控制台,DOM 本身中出现的唯一文本是生成的最后一句话的结果):

http://jsfiddle.net/kmblackwood/8dvNc/

最佳答案

Is there a limitation in the language preventing me from calling a function multiple times like so?

没有。问题是你正在成为The Horror of Implicit Globals的牺牲品。 。您需要申报i 。现在,i在你的makeSentences是一个隐式全局变量,因此最后的循环会受到它的影响。即i在你的for最后循环并 i在你的formakeSentences 内循环最终成为相同(全局)变量,i 。所以当你的 for最后循环调用 makeSentences第一次,makeSentences变化i大于 4 的值和你的for循环在最后终止。 (您也缺少 r 的声明。)

您还可以考虑使用“严格模式”,以便任何像样的 JavaScript 引擎(如任何现代浏览器中的引擎)都会告诉您隐式全局。严格模式告诉引擎写入 undefined symbol 应该是一个错误,而不是创建隐式全局。

您可以通过输入以下内容来启用严格模式:

 "use strict";

...位于文件或脚本 block 的顶部。它适用于该文件或脚本 block 中的所有内容。

关于javascript - 如何在函数内部(在函数上)执行 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23873935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com