[英]Making a local scope inside a for loop, into a global scope
我一直在搜索,但无法得到明确的答案。 (我是javascript的初学者,这是控制台内的一种测试/做法)如何在for循环中创建局部作用域(即全局作用域),以便随后将其添加到具有对象数组的变量中。 例如:我希望用户设置电影在名为“ stars”的变量(提示)中有多少颗星(等级)。 然后,可以在对象/数组中的movieDb变量中使用“ star”变量来调用它,使用变量star来控制台记录用户输入的star以及其他信息。 这是允许的还是有其他方法?
var movieDb =[
{
haswatched : "i",
title : "In Burges",
rating : stars,
},
{
haswatched : "i",
title : "Frozen",
rating : stars,
},
{
haswatched : "i",
title : "Mad Max",
rating : stars,
},
]
for (var i = 0; i < movieDb.length ; i++) {
var w = prompt("did you watch the movie?")
if (w === 'yes'){//first IF
movieDb[i].haswatched = "you have watched";
var r = prompt("would you like to rate us?");
if (r === "yes") {//nested in first IF
var stars = prompt("Enters Stars");
alert("Thanks for rating & Watching!")
} else if(r === "no"){ //nested in second IF
alert("You did not rate, Thanks for watching!")
}
}
else if (w === "no"){ //first ELSE IF
movieDb[i].haswatched = "you have not seen";
}
console.log(movieDb[i].haswatched + " " + "\""+movieDb[i].title+"\"" + " -" + movieDb[i].rating);
}'
javascript中的var具有功能范围。 因此,即使您在for循环内定义它,它们也将在循环外可用。 如果在循环之前执行console.log,则该值将是未定义的;如果在循环之后执行,则该值将是循环内可用的最后一个值。 要使事物成为块作用域(循环内的局部作用域),请使用let&const。 它们在ES6中可用,并且所有主要的浏览器都支持它们。
希望这会有所帮助
快乐学习
瓦萨尔
我不确定我是否很好地理解了您的问题,因此,如果我说了些愚蠢的话或回答了您没有问过的问题,请立即纠正我。
在for循环范围内定义变量的最佳方法是使用let
进行声明。
var i = "aaa";
for (let i = 0; i < 10; i++) {
console.log(i); // => 0...9
}
console.log(i); // => "aaa"
我认为您面临的问题是stars
不存在。
您可以将其设置为false
或null
(或任何值),然后将其设置为在提示符下获得的数字,或者仅在具有值时设置它:
{
haswatched : "i",
title : "In Burges"
}
...
movieDb[i].stars = stars;
我不知道起初将它设置为Int值是否更快,但是在这种情况下,这将是很小的改进,我不确定它是否有太大关系。
希望能帮助到你
编辑:
关于let
作用域内循环,这是一个示例:
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
</ul>
<script>
var lis = document.querySelectorAll('li');
for (let i = 0; i < lis.length; i++) {
lis[i].addEventListener('click', function(){
console.log(i);
});
}
</script>
单击li时,显示位置(从0到4),尽管:
<script>
var lis = document.querySelectorAll('li');
for (var i = 0; i < lis.length; i++) {
lis[i].addEventListener('click', function(){
console.log(i);
});
}
</script>
将显示5(i在离开循环之前递增)
我认为,如果我了解您要达到的目标,这应该会有所帮助...
var movieDb = [
{
haswatched : "i",
title : "In Burges",
rating : 0,
},
{
haswatched : "i",
title : "Frozen",
rating : 0,
},
{
haswatched : "i",
title : "Mad Max",
rating : 0,
},
];
for (var i = 0; i < movieDb.length ; i++) {
var w = prompt("did you watch the movie " + movieDb[i].title + "?")
if (w === 'yes'){//first IF
movieDb[i].haswatched = "you have watched";
var r = prompt("would you like to rate us?");
if (r === "yes") {//nested in first IF
var stars = prompt("Enters Stars");
movieDb[i].rating = stars;
alert("Thanks for rating & Watching!")
} else if(r === "no"){ //nested in second IF
alert("You did not rate, Thanks for watching!")
}
} else if (w === "no"){ //first ELSE IF
movieDb[i].haswatched = "you have not seen";
}
}
console.log(movieDb);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.