首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在它的代码块之外有一个变量可用?

为什么在它的代码块之外有一个变量可用?
EN

Stack Overflow用户
提问于 2013-12-06 02:27:36
回答 4查看 124关注 0票数 2

5分钟前我碰到了这个小宝石。我已经和JavaScript玩了很长一段时间了,自从我遵循最佳实践以来,我从未遇到过这样的情况,也不明白为什么它会起作用,而我认为它不应该起作用:

代码语言:javascript
复制
for (var i=0; i<10; i++){
   // ... something
}
console.log("i=", i);

输出10

i如何在for块之外可用?我一直认为声明部分只允许在该块中使用局部变量。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-06 02:28:52

我一直认为声明部分只允许在该块中使用局部变量。

不,不是在JavaScript。

JavaScript循环(以及大多数块)没有块作用域(在此之前,下一个版本将与let一起推出)。

目前只有两个地方JavaScript会阻塞作用域,那就是with子句(无论如何不应该使用这些子句)和catch子句。

相反,JavaScript主要依赖于函数的作用域--函数中声明的变量是该函数的本地变量。

票数 4
EN

Stack Overflow用户

发布于 2013-12-06 02:28:32

因为这相当于:

代码语言:javascript
复制
var i=0;
while (i<10){
   // ... something
   i++;
}

实际上,循环甚至根本不创建自己的作用域:

代码语言:javascript
复制
var x = 0;
while (x < 10) {
  x++;
  var i = 5;
}
i; // 5
票数 2
EN

Stack Overflow用户

发布于 2013-12-06 02:30:20

在这种情况下,i的声明在代码块之外。无论如何,Javascript没有块级别的作用域。变量要么是全局变量,要么是函数范围内的变量。

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

https://stackoverflow.com/questions/20414809

复制
相关文章

相似问题

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