js作用域
js的作用域我们可以理解为地盘,一个代码所在的地盘,他们互相是独立存在的一片区域,作用域的作用就是隔离变量,使不同作用域下的变量不冲突
var a =10; //全局作用域的变量a function fun(){ var a =0; //局部(函数)作用域的变量a /** * 两个变量a并不会冲突,因为他们在不同的作用域下,全局变量a储存在全局执行上下文对象(即window)中, * 而函数变量a存储在该作用域所对应的函数执行上下文对象中. */ }
全局作用域之外,每个函数的作用域,在编写代码时就已经确定了,而不是调用函数时!
var a = 100; function fun1() { console.log(a); } function fun2(f) { var a = 0; f(); } fun2(fun1);//输出是100;
作用域链: 由多个上下级关系的作用域组成的链,在我们查找一个变量或者方法时,方向是由内到外,先是在自身作用域中查找,如果没有找到该方法或者属性,则到它的上一层作用域中查找,直到全局作用域,如果还是没有找到,则抛出找不到的错误