ES6中有哪些作用域

在ES6(ECMAScript 2015)中,作用域(Scope)是指变量、函数和对象在代码中的可访问范围。ES6 引入了新的作用域规则,除了传统的全局作用域和函数作用域外,还新增了块级作用域。以下是 ES6 中的主要作用域类型:

1. 全局作用域(Global Scope)

全局作用域是指在代码的最外层定义的变量或函数,它们在整个程序中都可以访问。

var globalVar = "I am global"; // 全局作用域

function foo() {
    console.log(globalVar); // 可以访问全局变量
}

foo(); // 输出: I am global
  • 在浏览器中,全局作用域的变量会挂载到 window 对象上。

  • 在 Node.js 中,全局作用域的变量会挂载到 global 对象上。

2. 函数作用域(Function Scope)

函数作用域是指在函数内部定义的变量或函数,它们只能在函数内部访问。

function bar() {
    let localVar = "I am local"; // 函数作用域
    console.log(localVar); // 可以访问局部变量
}

bar(); // 输出: I am local
console.log(localVar); // 报错: localVar is not defined
  • 使用 var 声明的变量具有函数作用域。

  • 函数作用域在 ES6 之前是 JavaScript 的主要作用域规则。

3. 块级作用域(Block Scope)

块级作用域是 ES6 引入的新特性,由 let 和 const 声明的变量具有块级作用域。块级作用域是指由 {} 包围的代码块(如 ifforwhile 等)。

if (true) {
    let blockVar = "I am block-scoped"; // 块级作用域
    console.log(blockVar); // 可以访问块级变量
}

console.log(blockVar); // 报错: blockVar is not defined
  • 块级作用域使得变量只在当前代码块内有效,避免了变量泄露到外部作用域。

  • let 和 const 声明的变量具有块级作用域,而 var 声明的变量不具有块级作用域。

4. 模块作用域(Module Scope)

ES6 引入了模块化(import 和 export),模块作用域是指在一个模块中定义的变量或函数默认是私有的,不会污染全局作用域。

// module.js
let moduleVar = "I am module-scoped"; // 模块作用域
export function sayHello() {
    console.log(moduleVar);
}

// main.js
import { sayHello } from './module.js';
sayHello(); // 输出: I am module-scoped
console.log(moduleVar); // 报错: moduleVar is not defined
  • 模块作用域使得代码可以更好地组织和封装,避免命名冲突。

5. 词法作用域(Lexical Scope)

词法作用域是指变量的作用域在代码编写时就已经确定,而不是在运行时确定。JavaScript 采用的是词法作用域。

let outerVar = "I am outer";

function outerFunction() {
    let innerVar = "I am inner";

    function innerFunction() {
        console.log(outerVar); // 可以访问外部作用域的变量
        console.log(innerVar); // 可以访问父函数作用域的变量
    }

    innerFunction();
}

outerFunction();

6. 动态作用域(Dynamic Scope)

JavaScript 本身并不支持动态作用域,但可以通过 this 或 eval 模拟动态作用域的行为。动态作用域是指变量的作用域在运行时确定。

function dynamicScope() {
    console.log(this.value); // 动态作用域,this 的值在运行时确定
}

dynamicScope.call({ value: "I am dynamic" }); // 输出: I am dynamic

总结

ES6 中的主要作用域包括:

  1. 全局作用域:最外层作用域,变量在整个程序中可访问。

  2. 函数作用域:函数内部的作用域,变量只在函数内可访问。

  3. 块级作用域:由 {} 包围的代码块,let 和 const 声明的变量只在块内可访问。

  4. 模块作用域:模块内部的作用域,变量默认私有,不会污染全局。

  5. 词法作用域:作用域在代码编写时确定,是 JavaScript 的默认行为。

  6. 动态作用域:JavaScript 本身不支持,但可以通过 this 或 eval 模拟。

这些作用域规则使得 JavaScript 的变量管理更加灵活和安全,尤其是在大型项目中,可以有效避免变量冲突和污染。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955252.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【安卓开发】【Android】总结:安卓技能树

【持续更新】 对笔者在安卓开发的实践中认为必要的知识点和遇到的问题进行总结。 一、基础知识部分 1、Android Studio软件使用 软件界面 最新的版本是瓢虫(Ladybug),bug的确挺多。笔者更习惯使用电鳗(Electric Eel&#xff0…

openharmony电源管理子系统

电源管理子系统 简介目录使用说明相关仓 简介 电源管理子系统提供如下功能: 重启服务:系统重启和下电。系统电源管理服务:系统电源状态管理和休眠运行锁管理。显示相关的能耗调节:包括根据环境光调节背光亮度,和根…

SQL Server 导入Excel数据

1、选中指定要导入到哪个数据库,右键选择 》任务 》导入数据 2、数据源 选择Excel,点击 下一步(Next) 3、目前 选择OLE DB Provider ,点击 下一步(Next) 4、默认 ,点击 下一步(Next)…

MySQL安装-Windows

目录 官网下载地址 下载MySQL安装包或者压缩包 安装 / 添加Path环境变量 初始化mysql 无密码初始化 随机密码初始化 注册MySQL服务 / 移除已经注册过的服务 启动MySQL服务 登录mysql前修改密码 登录mysql 登录mysql后修改密码 停止MqSQL服务 企业中使用的场景 官网下…

OSPF的LSA的学习研究

OSPF常见1、2、3、4、5、7类LSA的研究 1、拓扑如图,按照地址表配置,激活OSPF划分相关区域并宣告相关网段 2、1类LSA,每台运行了OSPF的路由器都会产生,描述了路由器的直连接口状况和cost 可以看到R1产生了一条router lsa&#xff0…

ZNS SSD垃圾回收优化方案解读-1

本文解读的论文《Optimizing Garbage Collection for ZNS SSDs via In-storage Data Migration and Address Remapping》是由重庆大学相关研究团队撰写,发表于2024年11月。本文小编将结合论文内容进行学习解读,以供各位读者参考!由于水平有限…

生产管理看板助力节能科技公司实现数据自动化管理

在节能科技公司的生产过程中,数据管理的自动化是提高生产效率和产品质量的关键。然而,许多公司在数据记录、展示、对比和存档方面仍面临诸多痛点,如产品检测数据无法自动记录、缺乏直观的产线状态展示、检测数据对比繁琐耗时,以及…

JavaScript笔记基础篇03——函数

黑马程序员视频地址:黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes 目录 函数 函数的使用 1.函数的声明语法 2.函数的…

在PyCharm中使用Anaconda中的虚拟环境

1、在File菜单中找到Settings 2、Settings中搜索interpreter,找到Python Interpreter,再点击Add 3、选择第一个local interpreter 4、如图: 5、找到anaconda安装位置中的envs文件夹,在里面选择需要添加的python环境,如…

Windows系统安装 Rust 及其配置

1、在Rust官网下载Rust安装程序 (1)官网链接:Rust中文官网 (2)下载链接:下载Rust安装程序 (3)下载好后的rust安装程序,如下图: 2、运行 rustup-init.exe 安…

Python大数据可视化:基于Python对B站热门视频的数据分析与研究_flask+hive+spider

开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 排行榜界面 系统管理界面 看板展示 摘要 本项目以对B站热…

MySQL 安装配置(完整教程)

文章目录 一、MySQL 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL 5.1 初始化 MySQL5.2 启动 MySQL 服务 六、修改 MySQL 密码七、卸载 MySQL八、结语 一、MySQL 简介 MySQL 是一款广泛使用的开源关系型数据库管理系统(RDBMS)&am…

Navicat Premium 原生支持阿里云 PolarDB 数据库

近日,我司旗下的 Navicat Premium 软件通过了阿里云 PolarDB 数据库产品生态集成认证,这标志着 Navicat 通过原生技术全面实现了对秒级弹性、高性价比、稳定可靠的PolarDB 数据库三大引擎(PolarDB MySQL版、PolarDB PostgreSQL版和 PolarDB f…

基于SpringBoot的装修公司管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

cuda从零开始手搓PB神经网络

cuda实现PB神经网络 基于上一篇的矩阵点乘,实现了矩阵的加减乘除、函数调用等。并且复用之前元编程里面写的梯度下降、Adam、NAdam优化方法。实现PB神经网络如下: #ifndef __BP_NETWORK_HPP__ #define __BP_NETWORK_HPP__ #include "matrix.hpp&quo…

Django多线程爬虫:突破数据抓取瓶颈

Django框架以其高效、安全、可扩展性强等特点,在Web开发领域得到了广泛应用。同时,Python语言的多线程支持和丰富的库也为开发多线程爬虫提供了便利。将Django与多线程技术相结合,不仅可以利用Django的强大功能进行项目管理和数据存储&#x…

RabbitMQ前置概念

文章目录 1.AMQP协议是什么?2.rabbitmq端口介绍3.消息队列的作用和使用场景4.rabbitmq工作原理5.整体架构核心概念6.使用7.消费者消息推送限制(work模型)8.fanout交换机9.Direct交换机10.Topic交换机(推荐)11.声明队列…

Windows环境本地配置pyspark环境详细教程

目录 一、背景简记二、本地单机spark环境配置详细步骤第一步:python环境安装第二步:安装jdk及配置环境变量安装包下载安装环境变量配置 第三步:安装Spark安装包下载安装配置环境变量 第四步:安装hadoop安装包下载安装配置环境变量…

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学 文章目录 [智能家居篇]( )一、Win10 VM虚拟机安装 Home Assistant 手把手教学 前言一.下载Vm版本的HomeAsistant安装包 二.打开Vmware选择新建虚拟机1.选择自定义高级2.选择16.x及以上3.选择稍后安装4.根据官网的…

神经网络基础-正则化方法

文章目录 1. 什么是正则化2. 正则化方法2.1 Dropout正则化2.2 批量归一化(BN层) 学习目标: 知道正则化的作用掌握随机失活 DropOut 策略知道 BN 层的作用 1. 什么是正则化 在设计机器学习算法时希望在新样本上的泛化能力强。许多机器学习算法都采用相关的策略来减小…