答案 0 :(得分:0)
直到ES5,JS不支持block
级别范围。 block
我指的是{}
因此,如果您使用其他块级语言(如C#,Java,C ++等)编写相同的代码,则变量i
仅适用于由{}
for
分隔的区域。 {1}}循环。在循环之外它是不可访问的。
但是,在ES6世界中,事情有点不同,或者更好地说,were different
在ES6之前允许block level scope
使用let
关键字。
所以上面的代码被解释为
var i; // i is declared in the containing scope
for(i = 0; i < 10; i++) {
... // some code
}
return i; // therefore accessible here
如果这是块级范围,那么i
将无法在外部访问for循环。
for(var i = 0; i< 10; i++){
}
return i; // i is not accessible here in block scoped language
答案 1 :(得分:0)
在最新版本的Javascript(ES6 / ES2015)发布之前,Javascript只有本地范围和全局范围。以下是本地范围的示例:
function x(){
var y = 1
}
console.log(y) // undefined because y is in the local scope of function x
以下是全球范围的示例:
var a = 1
function sayOne() {
console.log(a) // prints 1 because the "a" variable is global
}
因此,在全局范围内,变量基本上对程序中的其他所有内容都可见,但在本地范围内,它隐藏在父函数之外的所有内容中。
如截图所示,Javascript没有块级范围。所以你提供的代码将返回i,尽管它是for循环块的OUTSIDE。
for (var i = 0, i < 10) {
// some code here
}
return i // this will return i since i is global and will not be undefined
但是使用块作用域,变量将仅存在于该代码块中,例如使用循环。让我们看看相同的代码,但是使用ES6块作用域“let”,它与“var”的作用相同,但具有块作用域。
for (let i = 0, i < 10) {
// some code here
}
return i // this will now return undefined because i is only defined within
// the for loop