JS作用域

68 阅读2分钟

一.作用域

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.内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作用域链。(就近原则)。