原文出处:
http://3060674.blog.51cto.com/3050674/1812390
一、“JavaScript中无块级作用域”
1
2
3
4
5
6
|
public
static
void
main ()
{
if
(
1
==
1
){
String name =
"seven"
;
}
System.out.println(name);
}
// 报错
|
1
2
3
4
5
6
|
public
static
void
Main()
{
if
(1==1){
string
name =
"seven"
;
}
Console.WriteLine(name);
}
// 报错
|
1
2
3
4
5
6
7
|
function
Main(){
if
(1==1){
var
name =
'seven'
;
}
console.log(name);
}
// 输出: seven
|
二、JavaScript采用函数作用域
1
2
3
4
5
6
7
8
9
|
function
Main(){
var
innerValue =
'seven'
;
}
Main();
console.log(innerValue);
// 报错:Uncaught ReferenceError: innerValue is not defined
|
三、JavaScript的作用域链
1
2
3
4
5
6
7
8
9
10
11
|
xo =
'alex'
;
function
Func(){
var
xo =
"seven"
;
function
inner(){
var
xo =
'alvin'
;
console.log(xo);
}
inner();
}
Func();
|
四、JavaScript的作用域链执行前已创建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
xo =
'alex'
;
function
Func(){
var
xo =
"seven"
;
function
inner(){
console.log(xo);
}
return
inner;
}
var
ret = Func();
ret();
// 输出结果: seven
|
-
全局作用域 -> Func函数作用域 -> inner函数作用域
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
xo =
'alex'
;
function
Func(){
var
xo =
"eirc"
;
function
inner(){
console.log(xo);
}
xo =
'seven'
;
return
inner;
}
var
ret = Func();
ret();
// 输出结果: seven
|
-
全局作用域 -> Func函数作用域 -> inner函数作用域
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
xo =
'alex'
;
function
Bar(){
console.log(xo);
}
function
Func(){
var
xo =
"seven"
;
return
Bar;
}
var
ret = Func();
ret();
// 输出结果: alex
|
-
全局作用域 -> Bar函数作用域
-
全局作用域 -> Func函数作用域
五、声明提前
1
2
|
console.log(xxoo);
// 报错:Uncaught ReferenceError: xxoo is not defined
|
1
2
3
|
var
xxoo;
console.log(xxoo);
// 输出:undefined
|
1
2
3
4
5
6
7
|
function
Foo(){
console.log(xo);
var
xo =
'seven'
;
}
Foo();
// 输出:undefined
|