作用域有哪些分别有什么区别呢

news/2024/11/14 12:11:42/
htmledit_views">

1.局部作用域(Function - level Scope)

  • 定义与概念
    • 在 JavaScript 中,函数内部定义的变量拥有局部作用域。这意味着这些变量只能在函数内部被访问和修改,函数外部无法直接获取它们的值。这种作用域机制是基于函数来划分的,每个函数都有自己独立的作用域。
html" title=javascript>javascript">function myFunction() {var localVariable = 10;console.log(localVariable);
}
myFunction();
console.log(localVariable); // 这会导致报错,因为localVariable是函数内部的局部变量
  • 在这个代码中,localVariable是在myFunction函数内部定义的。它的作用域仅限于myFunction函数内部,一旦函数执行完毕,这个变量就会被销毁(在 JavaScript 的垃圾回收机制下)。
  • 用途和重要性
    • 局部作用域有助于封装代码。它使得函数内部的逻辑可以独立于外部环境,不会因为外部变量的干扰而出现意外的结果。同时,不同函数中的局部变量可以同名,而不会相互冲突,这提高了代码的可维护性和可读性。例如,在一个复杂的 JavaScript 应用程序中,不同的函数可能会处理自己的数据,使用局部作用域可以确保这些数据的独立性。

2.块作用域(Block - level Scope)

  • 定义与概念
    • 块作用域是由一对花括号{}包裹的代码块所限定的作用域。在 JavaScript 中,使用letconst关键字声明的变量具有块作用域。在块内部定义的变量,在块外部是无法访问的。
html" title=javascript>javascript">{let blockVariable = 20;console.log(blockVariable);
}
console.log(blockVariable); // 这会导致报错,因为blockVariable是块级变量,块外无法访问
  • 在这里,blockVariable是在一个块(花括号包裹的部分)内部使用let声明的变量。它只能在这个块内部被访问,出了这个块,变量就超出了它的作用域范围。
  • 用途和重要性
    • 块作用域增强了 JavaScript 代码的灵活性和安全性。在循环、条件语句等代码块中,使用块作用域可以避免变量泄漏到外部环境。例如,在for循环中使用let声明循环变量,每次循环迭代时,变量都有自己独立的作用域,这有助于避免一些常见的闭包问题。

3.全局作用域(Global Scope)

  • 定义与概念
    • 全局作用域是在 JavaScript 脚本的最外层定义的范围,或者是挂载在window(在浏览器环境下)或global(在 Node.js 环境下)对象上的变量所拥有的作用域。全局变量可以在脚本的任何地方被访问,包括函数内部,除非在函数内部有同名的局部变量对其进行了遮蔽。
html" title=javascript>javascript">var globalVariable = 30;
function anotherFunction() {console.log(globalVariable);
}
anotherFunction();
console.log(globalVariable);
  • 在这个代码中,globalVariable是在全局范围内定义的变量。它可以在anotherFunction函数内部被访问,也可以在脚本的其他任何位置被访问。
  • 用途和重要性
    • 全局变量可以用于在整个应用程序中共享数据。不过,过度使用全局变量可能会导致代码的可维护性和安全性问题。因为全局变量可以在任何地方被修改,可能会导致意想不到的副作用。所以,在实际的 JavaScript 编程中,应该谨慎使用全局变量,只有在真正需要在多个函数或模块之间共享数据时才考虑使用。同时,可以通过模块系统(如 ES6 模块)来更好地管理全局数据的访问和共享。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/1546610.html

相关文章

Jenkins常用插件

关于代码插件 Branch API Git client Git Parameter Plug-In Git Git Push GitLab Git server Subversion Workspace Cleaner Subversion Plug-in 关于认证插件 Caffeine API Credentials 关于k8s插件 Kubernetes Kubernetes :: Pipeline :: DevOps Steps Kubernetes CLI Kub…

论文阅读《机器人状态估计中的李群》

目录 摘要1 介绍2 微李理论2.1 李群2.2 group actions2.3 正切空间和李代数 摘要 李群是一个古老的数学抽象对象,可以追溯到19世纪,当时数学家 Sophus Lie奠定了连续变换群理论的基础。多年后,它的影响已经蔓延到科学和技术的各个领域。在机…

Linux后台运行jar包,nohup、>、

nohup:no hung up 的缩写,意思是不挂断,主要作用就是可以在后台运行,并可以选择将日志输出到指定文件。在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前工作目录下&#xff0c…

高级java每日一道面试题-2024年11月01日-Redis篇-Redis支持的数据类型有哪些?

如果有遗漏,评论区告诉我进行补充 面试官: Redis支持的数据类型有哪些? 我回答: 在 Java 高级面试中,Redis 的数据类型是一个常见的考点。Redis 是一个高性能的键值存储系统,支持多种数据类型,每种数据类型都有其特定的用途和操作方法。以…

el-date-picker picker-options属性中disabledDate设置时间的禁用和启用,并且支持到时分秒的禁用和启用

默认picker-options 是配置的对象,如果代码中只存在一个开始时间或者一个结束时间,可以直接设置成对象进行配置我这里的应用场景是在表格中存在多个时间的配置项 使用到了dayjs作为时间判断,也可以自行根据js来实现判断需要将picker-options …

2024.11.7- Redis的主从复制集群

7.1 Redis的主从复制 7.1.1 简介 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。 ​ 默认情况下&#…

kafka常见面试题总结

Kafka 核心知识解析 一、Kafka 消息发送流程 Kafka 发送消息涉及两个线程:main 线程和 sender 线程。在 main 线程中,会创建一个双端队列 RecordAccumulator,main 线程负责将消息发送给 RecordAccumulator,而 sender 线程则从 R…

【HAProxy05】企业级反向代理HAProxy调度算法之静态算法与动态算法

HAProxy 调度算法 HAProxy通过固定参数 balance 指明对后端服务器的调度算法,该参数可以配置在listen或backend选 项中。 HAProxy的调度算法分为静态和动态调度算法,但是有些算法可以根据不同的参数实现静态和动态算法 相互转换。 官方文档&#xff1…