码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • js的作用域


    目录

    • 前言
    • 一,js的作用域
      • 1.1 作用域
      • 1.2 全局作用域
      • 1.3 局部作用域
    • 二,变量的作用域
      • 2.1 全局变量
      • 2.2 局部变量
      • 2.3 执行效率
    • 三,作用域链
    • 后记

    前言

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

    比如我在一个文件中定义一个变量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基础知识,谢谢关注!

  • 相关阅读:
    5、超链接标签
    数据结构与算法笔记:基础篇 - 初始动态规划:如何巧妙解决“双十一”购物时的凑单问题?
    软件测试项目实战经验附视频以及源码【商城项目,app项目,电商项目,银行项目,医药项目,金融项目】
    一种基于宏和serde_json实现的rust web中统一返回类
    Mac安装多个版本Node.js
    Node.js 入门教程 26 npm 依赖与开发依赖 & 27 Node.js 包运行器 npx
    arc 166 b
    易点易动设备管理系统帮助生产企业提升设备巡检效率
    什么是走索引?
    (附源码)node.js电商管理系统 毕业设计 251001
  • 原文地址:https://blog.csdn.net/zxdznyy/article/details/127667801
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号