首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >变量,在javascript中没有赋值。

变量,在javascript中没有赋值。
EN

Stack Overflow用户
提问于 2017-10-22 19:18:47
回答 5查看 699关注 0票数 0

为什么我们使用没有赋值的变量,比如在这个函数var i;

代码语言:javascript
代码运行次数:0
运行
复制
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); 
}

我的意思是它在没有这个的情况下工作,所以我很好奇它是干什么的,我知道我们可以在循环中检查这个值是否是未定义的,但是我看不到另一个用法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-10-22 19:24:26

使用var (或者在现代JavaScript中使用letconst)定义变量来设置变量的作用域非常重要。

在定义变量的函数中,用var定义的变量是有效的。如果省略声明,代码仍将工作,但i将在全局范围内定义,并可能干扰使用相同变量名称的其他函数。

在哪里放置var语句并不重要,但最好将其放在函数的开头,以使代码更容易阅读和避免错误。

您可能还编写了如下代码:

代码语言:javascript
代码运行次数:0
运行
复制
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); 
}
票数 1
EN

Stack Overflow用户

发布于 2017-10-22 19:21:03

该变量稍后将在循环中使用。当使用var关键字声明变量时,这些变量被“悬挂”到函数的开头,因此即使您编写:

代码语言:javascript
代码运行次数:0
运行
复制
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
EN

Stack Overflow用户

发布于 2017-10-22 19:22:43

其中一个原因是范围界定(如果您在全局范围内):

莱茨说我有以下功能

代码语言:javascript
代码运行次数:0
运行
复制
function test(){
   //code code code
   i=3
   //code code code
}

现在,我可以从函数测试外部访问该功能。但如果我这么做了

代码语言:javascript
代码运行次数:0
运行
复制
var i;
function test(){
   //code code code
   i=3
   //code code code
}

现在,函数测试之外的"i“与该函数中的"i”相同。至于这是否是好的代码设计,则是另一种讨论。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46878187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档