• js的作用域


    前言

    一段程序代码中所用到的名字并不总是有效和可用的,限定这个名字的可用性代码范围就是这个名字的==作用域。

    比如我在一个文件中定义一个变量a,在另一个文件中a无法使用。

    作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字的冲突。

    我们在学习前端的很多技术时,逃不开作用域的运用。比如在js中的函数,函数的作用域我们需要了解;比如在npm包的应用中,我们只能读取module.exports中向外暴露的内容;以及在vue中,我们注册组件时,有的是组件的作用域是全局性的,有的组件只能应用于某一块中。

    由此可见,了解js的底层作用域相关的知识非常重要。本节博客就围绕着js的作用域相关知识进行讲解,希望能对读着朋友有帮助。

    一,js的作用域

    1.1 作用域

    概念:作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。ES6 之前 JavaScript 没有块级作用域,只有全局作用域和函数作用域。

    1.2 全局作用域

    在代码中任何地方都能访问到的对象拥有全局作用域。如整个script标签或者是一个单独的js文件:
    在这里插入图片描述

    1.3 局部作用域

    在函数内部的就是局部作用域,又叫做函数作用域,这个代码的名字只在函数内部起效果和作用:
    在这里插入图片描述
    请看如下代码及运行结果:
    在这里插入图片描述
    在这里插入图片描述
    通过以上可知,两者作用域不一样,其实是互不影响的。

    但是一旦在同一个作用域中有两个相同的变量,就会出问题,后出现的num会覆盖前面出现的num:
    在这里插入图片描述
    在这里插入图片描述

    二,变量的作用域

    根据作用域的不同,变量分为两种,分别是全局变量和局部变量。

    2.1 全局变量

    其中,全局变量使在全局作用下的变量。
    如这个num:
    在这里插入图片描述

    2.2 局部变量

    接着是局部变量,局部变量是在局部作用域下的变量,如num1:
    在这里插入图片描述
    如果我们在外面引用,由于是局部作用域所以会报错,只能在函数内部调用:
    在这里插入图片描述
    在这里插入图片描述
    注意,如果在函数内部没有声明但是被赋值的变量也是全局变量,这个需要特别记忆:
    在这里插入图片描述
    在这里插入图片描述
    还要注意的一个点是,函数的形参也是局部变量。

    2.3 执行效率

    全局变量存放在内存中,只有浏览器关闭时才会销毁,比较占内存资源;
    而局部变量,当程序执行完毕后就会被销毁,比较节约内部资源。所以我们更喜欢使用局部变量。

    三,作用域链

    作用域链:内部函数访问外部函数的变量,采取的是链式查找的方式来决定取哪个值,这种结构我们称为作用域链:
    在这里插入图片描述
    在这里插入图片描述

    采用就近原则,内部函数访问外部函数,从内向外访问,没有的话就继续往上找即可:
    在这里插入图片描述

    后记

    本节内容讲解了作用域,变量作用域以及作用域链的相关知识,后续会更新更多的js基础知识,谢谢关注!

  • 相关阅读:
    Java求解一元二次方程
    C51--PC通过串口(中断)点亮LED
    Helm3模板-内置函数和Values
    MySQL高级篇知识点——索引的数据结构
    路由转发路径【未完成】
    iOS调试技巧——使用Python 自定义LLDB
    【每周一测】Java阶段三第三周学习
    基于Jaccard相似度的推荐算法---示例
    面试必问:JVM 如何确定死亡对象?
    高并发系统设计
  • 原文地址:https://blog.csdn.net/zxdznyy/article/details/127667801