首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在for循环中声明i时使用var

在for循环中声明i时使用var
EN

Stack Overflow用户
提问于 2015-03-29 00:38:13
回答 4查看 330关注 0票数 1

我看到Javascript代码使用了两种不同的方法来定义for循环。

代码语言:javascript
运行
复制
for (var i=0;i < x.length; i++)

但它也是

代码语言:javascript
运行
复制
for (i=0; i < x.length; i++)

同样的事情也发生在for-in循环中。

代码语言:javascript
运行
复制
for (var i in x)

代码语言:javascript
运行
复制
for (i in x)

i声明为var与只说i有什么区别吗?做一个比另一个好吗?这样做是正确的吗?据我所知,他们的行为都是一样的,但肯定有一些不同。

注意:我不是在问for-infor (i=0)之间的区别

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-29 00:41:13

如果函数中没有var声明,则对i的引用将指向全局对象的i属性。如果for循环主体中的代码调用也修改全局i的代码(例如,在被调用的方法中),则可能会发生各种不可预测的行为。

注意,在var i循环初始化中声明for

代码语言:javascript
运行
复制
for (var i = ...)

等于在var i;循环之前声明for

代码语言:javascript
运行
复制
var i;
for (i = ...)

特别是,i的声明将是吊起到封闭作用域的顶部。

编辑:如果启用严格模式,则必须声明循环变量(实际上是所有变量)。引用没有用var语句声明的变量将导致抛出ReferenceError (而不是导致全局变量的存在)。

票数 3
EN

Stack Overflow用户

发布于 2015-03-29 00:46:34

JavaScript在功能范围上是限定的。至少目前,该语言没有块级变量。

在编写for (var i=0; ... );时,它与

代码语言:javascript
运行
复制
var i;
for (i=0; ... );

在没有"use strict";的情况下,变量声明将是hoisted

for (i=0; ... );就意味着i属于全局(最顶层)对象(在浏览器中它是window)

票数 1
EN

Stack Overflow用户

发布于 2015-03-29 01:08:15

简介:

for语句创建一个由三个可选表达式组成的循环。

资料来源: Mozilla JavaScript文档

背景:

您指的是初始化,它是表达式或变量声明。它几乎总是用于初始化一个计数器变量,如您所示,它允许我们迭代一个集合。

此表达式可以选择使用var关键字声明新变量。这些变量不是循环的本地变量,即它们位于for循环所在的相同范围内。此表达式的结果将被丢弃。

在JavaScript中,变量可以保存不同的数据类型,而在计数器变量的情况下,JavaScript将变量视为数字。

答案:

您可以选择声明一个新变量(或者完全不声明)的原因是JavaScript编程语言的特性。您已经发现了语言中处理变量和作用域的一个重要方面。

“变还是不变”

请参阅另一篇关于使用var或根本不使用var的帖子,以了解更多.

var关键字的功能是什么?何时使用它(或省略它)?

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

https://stackoverflow.com/questions/29324332

复制
相关文章

相似问题

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