javascript基础-作用域

137 阅读2分钟

作用域的定义

通俗来说就是变量在JavaScript作用的范围,系统来说是:代码名字(变量)作用的范围

作用域的分类

全局作用域

作用于整个代码环境整,或者独立的js文件 作用于全局作域内的变量,成为全局变量

  • 全局作用域是最大的作用域
  • 在全局作用域中定义的变量可以在任何地方使用
  • 页面打开的时候,浏览器会自动给我们生成一个全局作用域 window
  • 这个全局作用域会一直存在,直到页面关闭才会销毁
  • 代码展示
  let num = 10;//我是一个全局变量
        console.log(num);//10
        function fun() {
            console.log(num);//10
        }
        fun()

局部作用域

  • 局部作用域是在全局作用域下开辟的一块空地
  • 每一个函数内部都是一个局部作用域
  • 在局部作用域下的定义的变量是局部变量,局部变量只能在局部作用域下使用
  • js里面只有函数才有局部变量
  • 代码展示
function fun() {
            let num = 10 //我是一个局部变量
            console.log(num);//10
        }
        console.log(num); //报错 num is not defined

块级作用域

在大括号里面声明的变量(分支和循环),只能在大括号内部使用
必须是let const声明的变量 代码展示:

for (let i = 0;i<=5;i++){
            // 我是一个块级变量
        }
        console.log(i);//报错 num is not defined

var 声明的变量没有块级作用域的变量的概念 代码展示:

for (var i = 0;i<=5;i++){
            // 我是一个块级变量
        }
        console.log(i);//6

特殊情况

  1. 但是有一种情况,函数内部的形参可以看做是局部变量。
  2. 如果函数内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐。
  function fn() {
            num = 2  //我是一个没有被声明的变量
        }
        fn()
        console.log(num);//2

变量的访问原则

  1. 函数里面是一内部个作用域,如果函数里面还有函数,那么在这个作用域里面又可以诞生一个新作用域

访问原则:在能够访问的情况下,先局部,局部没有再找全局 代码展示:

let num = 10
        function fn() {
            let num = 20
            function fun() {
                let num = 30
                console.log(num)//30
            }
            fun()
        }
        fn()