2014-07-11 238 views
2

我有点糊涂http://jsfiddle.net/变量范围

{ 
    for (var counter = 1; counter < 6; counter++) { 

    } 
} 
console.log(counter); 

如果从循环变量创建for loop范围是可用的,那么为什么我有机会获得更高的变量一个水平,我公司自创建放置这些括号是另一个范围?

+0

Javascript只知道对象范围和功能范围。没有块范围。 – Luaan

+1

变量有函数级范围,不是块级...... –

+0

啊,现在我明白了。 –

回答

4

变量有功能范围(或全球范围如果他们的功能之外声明)。

ES6引入了let关键字块范围变量。

4

循环没有自己的作用域。

循环是一个块,块没有自己的作用域;使用var创建的变量只能具有函数或全局范围。

正如其他人指出的那样,在ES6中,您将能够使用let关键字的块范围变量。

+0

我知道,范围与创建范围相同。也许我错了? –

+0

是的,你错了。如果你使用'for(var counter = 1 ...)','counter'就可以从包含这个循环的函数的前面(或者全局的,如果它不在一个函数中)开始使用。 –

2

你错了,循环没有范围。与var关键字创建