作用域
作用域就是可访问变量,对象,函数的集合。
作用域分为全局作用域和局部作用域
局部作用域(Activation Object (AO)) :只能在当前函数中访问
全局作用域(Global Object (GO)):只要定义了,可以在代码中的任何位置访问
作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突
var a = 10;//全局变量
function fun(){
var a = 10;//局部变量
}
作用域链
1.一般情况下,变量的取值到会先从在函数里面开始查找,但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过 程形成的链条就叫做作用域链。
2.当函数中需要查找一个变量的值的时候,会在从作用域链查找,先是从函数自身里中先找,如果没有找到对应的变量,则到下一级的链上找,一旦找到了变量,则不再继续,如果找到最后也没有找到需要的变量,则返回undefined。
var a= 10;
function fun(){
var a= 20;
function fun1(){
var a= 30;
console.log(a); //输出:30 先找函数自身的变量,
}
fun1();
}
fun();
var b = 10;
function fun(){
var b = 20;
function fun1(){
console.log(b); //输出:20 先找函数自身的变量,再找父级函数中的变量
}
fun1();
}
fun();
var c= 10;
function fun(){
function fun1(){
console.log(c); //输出:10 先找函数自身的变量,再找父级函数中的变量, 然后再找全局对象的变量
}
fun1();
}
fun();
function fun(){
function fun1(){
console.log(d); //输出:undefined 先找函数自身的变量,再找父级函数中的变量,
然后再找到全 局对象的变量,还是没找到就返回undefined
}
fun();
}
fun();