原文出处: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 |
