JavaScript之作用域

91 阅读2分钟

0. 目标

  • 能够说出JS的两种作用域
  • 能够区分全局变量和局部变量
  • 能够说出如何在作用域链中查找变量的值

1. 作用域

1.1 作用域的定义

代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性更重要的是减少命名冲突

1.2 JS的作用域(ES5)

全局作用域 : 在整个script标签或者是一个单独的JS文件中起作用

var num = 10; // 全局作用域

局部作用域(函数作用域) : 只在函数内部起作用和效果

function fn(a){ 
    // 局部作用域 
    var num = 20; 
    }

2. 变量的作用域

2.1 全局变量和局部变量

全局作用域下的变量为全局变量,在整个作用域下都可以使用

注意:如果在函数内部没有声明,直接赋值的变量为全局变量

局部作用域下(函数内部)的变量,就是局部变量,只能在函数内部使用

注意:函数的形参也可以看作是局部变量

  • 全局变量 和 局部变量 的区别
  • 起作用的区域不同
  • 全局变量在浏览器关闭时才会被销毁,比较占内存。局部变量在代码块运行结束后,就会被销毁,更节约空间。
var num = 10;
function fun(){
    console.log(num);  // 10
    num2 = 20; // 全局变量
}
fun();

2.2 ES5中JS没有块级作用域

{} 中包裹的内容为块级作用域 if(){} for(){}之中的变量都是全局变量

3. 作用域链

只要是代码,至少有一个作用域

函数内部的是局部作用域

函数中还有函数,就会诞生一个新的局部作用域

1651210063(1).png

根据内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链 就近原则

1651210345(1).png

输出 20

1651210388(1).png

输出 num 为 123