为什么我们在这个函数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);
}
我的意思是它的工作没有这个,所以我很好奇它是什么,我知道我们可以在循环中检查值是否未定义,但我没有看到另一种用法
答案 0 :(得分:1)
变量在循环中使用几行之后。使用var
关键字声明变量时,变量是&#34;悬挂&#34;到函数的开头,所以即使你写了:
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
变量最终会在全局范围内出现,这会导致问题,因为它将与其他无法在本地声明变量的函数共享 - 所以你会最终会产生副作用(而且很难调试)。
答案 1 :(得分:1)
使用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);
}
答案 2 :(得分:0)
其中一个原因是范围界定(如果您在全球范围内):
Lats说我有以下功能
function test(){
//code code code
i=3
//code code code
}
现在我可以从功能测试之外访问我了。但如果我这样做:
var i;
function test(){
//code code code
i=3
//code code code
}
现在&#34;我&#34;在功能测试之外与&#34; i&#34;在那个功能里面。这是否是一个好的代码设计是另一个讨论。
答案 3 :(得分:0)
因为它用于for循环中的索引值并在for循环的初始值部分中初始化,所以使用它是安全的。它的表现如下:
var some_value = 10;
for(var i = 0; i < some_value; i++){
console.log(i, "looped");
}
console.log(i);
&#13;
等于
var some_value = 10, i;
for(i = 0; i < some_value; i++){
console.log(i, "looped");
}
console.log(i);
&#13;
我可以在相同的范围(你的情况下的函数体)中使用,因为它在相同的范围内定义。
答案 4 :(得分:0)
添加到@芬顿的回答:
在旧版JavaScript中,您甚至不需要声明变量。但你绝对应该。在源代码的开头添加"use strict";
以确保您不会忘记;
遗留JavaScript中变量的范围并不明显。即使JavaScript是C风格,变量也没有块范围,但功能范围。因此,最好在函数开头声明所有变量,以使其清晰明确。