1. 全局作用域(Global Scope)
在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:
(1)最外层函数和在最外层函数外面定义的变量拥有全局作用域,例如:
1
2
3
4
5
6
7
8
9
10
11
12
|
var
authorName=
"山边小溪"
;
function
doSomething(){
var
blogName=
"梦想天空"
;
function
innerSay(){
alert(blogName);
}
innerSay();
}
alert(authorName);
//山边小溪
alert(blogName);
//脚本错误
doSomething();
//梦想天空
innerSay()
//脚本错误
|
(2)所有末定义直接赋值的变量自动声明为拥有全局作用域,例如:
1
2
3
4
5
6
7
8
|
function
doSomething(){
var
authorName=
"山边小溪"
;
blogName=
"梦想天空"
;
alert(authorName);
}
doSomething();
//山边小溪
alert(blogName);
//梦想天空
alert(authorName);
//脚本错误
|
变量blogName拥有全局作用域,而authorName在函数外部无法访问到。
(3)所有window对象的属性拥有全局作用域
一般情况下,window对象的内置属性都拥有全局作用域,例如window.name、window.location、window.top等等。
1. 局部作用域(Local Scope)
和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域,例如下列代码中的blogName和函数innerSay都只拥有局部作用域。
1
2
3
4
5
6
7
8
9
|
function
doSomething(){
var
blogName=
"梦想天空"
;
function
innerSay(){
alert(blogName);
}
innerSay();
}
alert(blogName);
//脚本错误
innerSay();
//脚本错误
|
由于for循环并不是一个函数体,所以for循环中定义变量的作用域是for循环所在的函数体