1.作用域
-
一段代码中的名字并不总是有效和可用的,限定我们定义的变量名的可用性范围就是这个名字的作用域。
-
作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字的冲突。
全局作用域:整个script标签,或者是一个单独的js文件
局部作用域(函数作用域):在函数内部就是局部作用域,只在函数内部起效果和作用
2.变量的作用域
2.1 全局变量:全局作用域下的变量
- 第一种:在全局作用域下用var声明的变量
- 第二种:在函数内部不使用var声明的变量也是全局变量(不建议使用)
2.2 局部变量:函数内部起作用
- 在函数内部用var声明的变量是局部变量
- 函数的形参实际上就是局部变量
2.3 区别:
- 全局变量只有浏览器关闭的时候才会销毁,比较占内存
- 局部变量 当程序执行完毕就会销毁,比较节约内存资源
2.4 块级作用域:
ES6才有块级作用域let
3.作用域链(就近原则)
-
只要是代码,就有一个作用域
-
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
-
根据内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称为作用域链
-
就近原则,谁近就用谁。一层一层往外查找
<script>
var num = 10;
function fn() {
var num = 20;
function fun() {
console.log(num); //这里20近,所以输出num为20
}
fun();
}
fn();
</script>