一.作用域
1.概念:一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
2.作用域好处:提高了程序逻辑的局部性,增强了程序的可读性,减少了名字的冲突。
3.作用域分为全局作用域和局部作用域(函数作用域)
- 全局作用域:整个script标签或者是一个单独的js文件。
- 局部作用域(函数作用域):在函数内部就是局部作用域,这个代码的名字只在函数的内部起效果和作用。
4.变量作用域
- 全局变量:定义在全局作用域下的变量 (如果在局部作用域内部,没有声明只赋值属于全局变量)。
- 局部变量:定义在局部作用域(函数作用域)下的变量(函数的形参属于局部变量)。
-
var num = 10; //num为全局变量 console.log(num); function getNumber() { console.log(num); //定义在全局作用域下的全局变量 ,在函数内部也可以执行 } getNumber(); function getNum() { //函数的形参属于局部变量 var num1 = 20; //num1为局部变量 只能在函数内部起作用 num2 = 40; //如果在局部作用域内部,没有声明只赋值属于全局变量 } getNum(); console.log(num1); // 报错 console.log(num2); // num2 = 40;
5.全局变量和局部变量从执行效率上
-全局变量只有在关闭浏览器时才会销毁(占用内存资源)。
- 局部变量当程序执行完毕就会销毁(节约内存资源)。
二.作用域链
1.内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作用域链。(就近原则)。