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