1.全局作用域
(1)最外层函数和最外层函数外通过var来定义的变量(全局变量、全局函数)
(2)在函数内部不通过var定义的变量也称为全局变量
2.在ES5中函数是区分全局和局部唯一的代码块
(1)在函数内通过var来定义的变量,以及内部定义的函数
(2)函数的参数具有局部作用域
function foo(x){ //x 也是局部变量
console.log(x);
}
foo();
console.log(x);//报错:x is not defined
作用域例子:
1.var a = 10;
function foo(){
console.log(a);//10
}
foo();
2.var a = 10;
function foo(a){
console.log(a);//undefined
}
foo();
3.var a = 10;
function foo(){
console.log(a);//10
}
foo(a);
4.var a = 10;
function foo(a){
console.log(a);//10
}
foo(a);
5.var a = 10;
function foo(){
console.log(a);//undefined
var a = 20;
}
foo(a);
a在函数内部提升,但是赋值不会提升;
6.var a = 10;
function foo(a){
console.log(a);//10
var a = 20;
}
foo(a);
7.var a = 10;
function foo(a){
var a = 20;
console.log(a);//20
}
foo(a);
console.log(a);//10
8.var a = 10;
function foo(a){
//有一个形参a,相当于var a;
a = 20;//局部变量
console.log(a);//20
}
foo(a);
console.log(a);//10
9.var a = 10;
function foo(){
a = 20;
console.log(a);//20
var a = 30;
}
foo(a);
console.log(a);//10
//声明提升,a为局部变量
10.var a=10;
function foo(){
console.log(a);//10
a=20;
}
foo(a);
console.log(a);//20
11.var a=10;
function foo(){
a=20;
console.log(a);//20
}
foo(a);
console.log(a);//20
foo执行后,a相当于重新赋值了20;