浏览器使用此JS代码冻结,为什么
browser freezes with this js code, why?
我正在编写一个JavaScript代码。但是当我尝试在浏览器(Firefox&chrome)上执行它时,浏览器只是冻结并必须强制退出。我正在尝试在左侧的随机位置生成 5 张此图像。这是代码,这里有什么问题?
<html><head>
<title></title>
<meta charset=utf-8>
<style>
img {
position: absolute;}
div {
position: absolute;
width: 500px;
height: 500px;}
#rightSide {
left: 500px;
border-left: 1px solid black;}
</style>
<script>
var numberOfFaces = 5;
function generateFaces() {
while (numberOfFaces) {
var smileFace = document.createElement("img");
var random_number = Math.floor(Math.random() * 400);
smileFace.src = "smile.png";
smileFace.style.top = random_number + "px";
smileFace.style.left = random_number + "px";
document.getElementById('leftSide').appendChild(smileFace);}}
</script>
</head>
<body onload="generateFaces()">
<h2>Matching Game</h2>
<p>Click on the extra smiling face on the left.</p>
<div id="leftSide"></div>
<div id="rightSide"></div>
</body></html>
您将numberOfFaces
定义为 5,然后启动一个 while
循环,检查该变量是否具有真值 - 任何大于 0 的值都是真值。但是,该变量永远不会改变,从而导致无限循环。
您需要使用 numberOfFaces--;
或类似方式在循环中的某个地方递减它。也许是这样的:
<script>
var numberOfFaces = 5;
function generateFaces() {
while (numberOfFaces) {
var smileFace = document.createElement("img");
var random_number = Math.floor(Math.random() * 400);
smileFace.src = "smile.png";
smileFace.style.top = random_number + "px";
smileFace.style.left = random_number + "px";
document.getElementById('leftSide').appendChild(smileFace);
numberOfFaces--;
}
}
</script>
也许做一个关于while
循环的教程来帮助更多地理解这一点:http://www.tutorialspoint.com/javascript/javascript_while_loop.htm
注意:上面的 while 循环将在numberOfFaces
变得0
时停止。在 JS 中,0 是假的。
你的这个while循环是一个无限循环; numberOfFaces
常数为 5,这是一个真值。尝试将其更改为其他内容。
while(true) {
// never stops
// 5 is truthy value
}
您正在寻找这个:
for(var i=numberOfFaces; 0 < i; i--){
// your iteration code
}
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 为什么“;未定义的“;在JavaScript中结束循环
- 在哪里使用名为“;冻结”;
- 为什么这在IE中的工作方式与在Firefox中不同
- 知道为什么我的旋转木马不会自动更改图片吗
- 为什么继续;语句冻结浏览器
- 为什么Javascript会冻结计算机,而不是C++或Python
- 浏览器使用此JS代码冻结,为什么
- 为什么按 setTimeout 拆分的工作负载仍然会冻结浏览器
- 为什么空结果会冻结脚本以及如何避免它
- 为什么jQuery Mobile Simple Dialogue在用户点击过快时会冻结
- 为什么在执行许多ajax请求时浏览器会冻结
- 为什么 Ajax 调用在 WebDriverWait (Selenium) 期间被冻结
- 为什么autoResizeColumn()循环会冻结Google Apps脚本?
- 为什么是冻结的“枚举”?慢
- 我的网站冻结了——可能是JavaScript,但我不知道为什么
- 为什么在循环冻结我的页面时会这样做
- 为什么我需要在JavaScript中冻结一个对象
- 为什么我在 JavaScript 中的 for 循环导致我的网页冻结
- 为什么这个循环会冻结我的浏览器