作用域

74 阅读1分钟

局部作用域

  1. 局部作用域: 函数作用域 + 块级作用域
  2. 块级作用域: 大括号 + let / const 声明 的变量
  
 作用域分为哪两种: 局部和全局
 作用域这个概念是干什么的: 就是你当前变量使用范围
 
 局部作用域: 函数作用域 + 块级作用域
  1. 局部作用域里面定义的变量外面访问不到

    function getNum() {
      const count = 100;
      console.log(num);
    }
    getNum()
 块级作用域: 大括号 + let / const 声明的变量 --- if + for
 
      const msg = "hello"
    }

     console.log(msg);


    for(let i = 0; i< 3; i++) {
      console.log(i);
    }

    console.log(i);

全局作用域 ----

// 全局作用域里面的变量 任何作用域下面都可以看见
// 局部作用域里面的变量 外面看不见
// 先声明一个全局变量
const num = 10;
 // 局部变量
 if (true) {
  const str = "hello"
  console.log(num);
}
function fn() {
  console.log(num);
}
调用函数
fn()
console.log(str);

作用域链

 <script>
    // 作用域链就是 变量的查找机制
    // 大白话: 里面的函数能够看见外面的变量 ---外面看不见里面
    // 官方:  变量查找的时候: 从内往外, 就近查找

    // 全局变量a
    let a = 1;  // 全局变量 任何作用域都可以看见
    function fn() {
      // 局部变量 a ---- 在局部作用域里面声明的变量外面无法访问
      let a = 10
      function g() {
        a = 20 // 这个a 是哪个a
        console.log(a);
      }
      g()
    }

    // 问题: a是全局变量还是局部变量, a的值等于多少?
    fn()
  </script>

总结

1. 局部作用域: 函数作用域 + 块级作用域
2. 全局作用域变量访问机制:  在任何局部作用域里面都可以看见
3. 局部作用域变量的访问机制:在局部作用域里面定义的变量外面看不见
4. 作用域链: 什么是作用域链: 变量的查找机制
        具体是什么机制: 从内向外, 就近查找