1.全局作用域
#1.普通函数与函数表达式的区别
先说结论:普通函数会在js中提前创建,但函数表达式不会,函数表达式只会创建变量名,但匿名函数不会创建。也就是说,普通函数可以提前调用,但是函数表达式不可以,会报错
代码案例:
//1.
fn() //直接打印123,fn是普通函数,被js提前创建,可以调用
function fn(){
console.log("123");
}
//2.
func(); //报错,func is not a function
//原因:func通过关键字var声明,会进行变量提升
//变量提升:(先创建func,但不会赋值,也是是说匿名函数没有被提前创建,所以会报错)
var func = function() {
console.log("123");
};
func(); //打印 123
局部作用域:
函数作用域的特点:
1.函数作用域当调用函数时被创建,函数调用之后被销毁,每次调用都会产生新的函数作用域,每个函数作用域相互独立。
2.在函数作用域中可以访问到全局作用域的变量。
3.在全局作用域中无法访问到函数作用域!
代码解释:
//1.
function fn(){
console.log("123");
}
fn(); //调用时创建函数作用域,调用结束时销毁,
fn(); //调用时创建函数作用域,调用结束时销毁,
fn(); //调用时创建函数作用域,调用结束时销毁,
//虽然调用了3次,但是也创建了3次函数作用域,并且每个函数作用域相互独立
//2.
var a=10;
function func(){
console.log(a);
}
func(); //打印 10,函数作用域可以访问到全局作用域的变量
//3.
function func1(){
var b=10;
}
console.log(b);//打印 undefined, 全局作用域不能访问局部作用域