Skip to content
This repository has been archived by the owner on May 4, 2022. It is now read-only.

Latest commit

 

History

History
51 lines (43 loc) · 1.76 KB

08-JS作用域.md

File metadata and controls

51 lines (43 loc) · 1.76 KB

1. 什么是作用域

// JS作用域就是变量在某个范围内其作用和效果。作用域的目的是为了提高程序的可靠性,更重要的是减少命名冲突。
// 1. JS作用域(ES6之前):全局作用域,局部作用域
// 2. 全局作用域:整个script标签,或者是一个单独的JS文件
// 3. 局部作用域:在函数内部就是局部作用域,某个变量只能在这个函数内部存在
function fn() {
    // 局部作用域
}

2. 变量的作用域

根据作用域的不同,变量可以分为两种:

  • 全局变量
  • 局部变量
// 根据作用域的不同,变量可以分为两种:
// 1. 全局变量(直接在全局作用域下声明)
// 注意:如果在函数内部没有声明直接赋值的变量也属于全局变量
var num = 0;
console.log(num); // 全局可使用
function fn1() {
    console.log(num); // 局部可使用
}
fn1();
// 2. 局部变量(声明在函数内部)
// 注意:函数的形参也可以看做是局部变量
function fn2() {
    var num2 = 1;
    num3 = 2; // 这个也属于全局变量
    console.log(num2); // 局部可使用
}
fn2();
// console.log(num2); // 全局不可使用,会报错
console.log(num3);

从执行效率来看:

  • 全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
  • 局部变量当程序执行完毕后就会销毁,比较节省内存资源

3. 作用域链

  • 只要是代码,就至少有一个作用域
  • 写在函数内部的就是局部作用域
  • 如果函数中还有函数,那么这个局部作用域中又多了个局部作用域
  • 根据内部函数可以访问外部函数变量的这个机制,用链式查找决定哪些数据能被内部函数访问,就成为作用域链(就近原则)