为什么我们使用没有赋值的变量,比如在这个函数var i;
中
function showSlides() {
var i;
var slides = document.getElementsByClassName("mySlides");
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex++;
if (slideIndex > slides.length) {slideIndex = 1}
slides[slideIndex-1].style.display = "block";
setTimeout(showSlides, 2000);
}
我的意思是它在没有这个的情况下工作,所以我很好奇它是干什么的,我知道我们可以在循环中检查这个值是否是未定义的,但是我看不到另一个用法。
发布于 2017-10-22 19:24:26
使用var
(或者在现代JavaScript中使用let
或const
)定义变量来设置变量的作用域非常重要。
在定义变量的函数中,用var
定义的变量是有效的。如果省略声明,代码仍将工作,但i
将在全局范围内定义,并可能干扰使用相同变量名称的其他函数。
在哪里放置var
语句并不重要,但最好将其放在函数的开头,以使代码更容易阅读和避免错误。
您可能还编写了如下代码:
function showSlides() {
var slides = document.getElementsByClassName("mySlides");
for (var i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex++;
if (slideIndex > slides.length) {slideIndex = 1}
slides[slideIndex-1].style.display = "block";
setTimeout(showSlides, 2000);
}
发布于 2017-10-22 19:21:03
该变量稍后将在循环中使用。当使用var
关键字声明变量时,这些变量被“悬挂”到函数的开头,因此即使您编写:
function showSlides() {
var slides = document.getElementsByClassName("mySlides");
for (var i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex++;
if (slideIndex > slides.length) {slideIndex = 1}
slides[slideIndex-1].style.display = "block";
setTimeout(showSlides, 2000);
}
在技术上,变量i
仍然声明在函数的顶部。
如果完全省略变量声明,那么i
变量最终将出现在全局范围内,这将导致问题,因为它将与其他函数共享,而其他函数也无法在本地声明变量--因此最终会产生副作用(它们很难调试)。
发布于 2017-10-22 19:22:43
其中一个原因是范围界定(如果您在全局范围内):
莱茨说我有以下功能
function test(){
//code code code
i=3
//code code code
}
现在,我可以从函数测试外部访问该功能。但如果我这么做了
var i;
function test(){
//code code code
i=3
//code code code
}
现在,函数测试之外的"i“与该函数中的"i”相同。至于这是否是好的代码设计,则是另一种讨论。
https://stackoverflow.com/questions/46878187
复制相似问题