JavaScript的作用域

目录

目标

概述

实战

变量提升

var

let

const

作用域


目标

        掌握变量的创建方法,了解他们的作用域。


概述

有三种方法创建变量,分别是var、let、const,区别如下:

特性varletconst
作用域函数作用域块级作用域块级作用域
变量提升是,但值是undefined是,但未初始化(TDZ)是,但未初始化(TDZ)
是否可重新赋值可以可以不能
是否可重复声明可以不可以不可以
是否必须初始化

        其中,var是旧代码的变量声明方式,考虑到用这种方式声明变量会导致各种问题,官方推荐使用let,尤其在循环中。const因为不可以重新赋值和必须初始化的原因,所以适合声明常量。


实战

变量提升

        变量和函数声明会被提升到其作用域的顶部,但不同的声明方式(var、let、const)在提升时的行为不同。如果输出一个没有定义的变量,则会报ReferenceError错误,代码如下:

//Uncaught ReferenceError ReferenceError: a is not defined
console.log(a)

var

//undefined
console.log(a)
var a = 1
//1
console.log(a)

等价于以下代码:

var a
//undefined
console.log(a)
a = 1
//1
console.log(a)

结论

        var具备变量提升的功能,变量被提升后初始化为undefined


let

//报错:Uncaught ReferenceError ReferenceError: Cannot access 'a' before initialization
console.log(typeof a); 
//如果没有这行代码,则第一个输出是undefined
let a =1;
//不会输出
console.log(a);

结论

        let具备变量提升的功能,变量被提升但没有初始化。


const

//报错:Uncaught ReferenceError ReferenceError: Cannot access 'a' before initialization
console.log(typeof a); 
//如果没有这行代码,则第一个输出是undefined
const a =1;
//不会输出
console.log(a);

结论

        const具备变量提升的功能,变量被提升但没有初始化。


作用域

        var是函数作用域,let和const是块级别作用域。也就是说:var的作用范围仅限于最近的函数。let和const的作用域是最近的{}块内,出了这个块就无法访问。

演示

function fun(){if(true){var a=1}console.log(a)
}
//1
fun()function fun2(){if(true){let b=1}console.log(b)
}try {fun2()
} catch (error) {//报错了: b is not definedconsole.log("报错了:",error.message)
}function fun3(){if(true){const c=1}console.log(c)
}try {fun3()
} catch (error) {//报错了: c is not definedconsole.log("报错了:",error.message)
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matplotlib学习

开始学习Python数据可视化 一.基础绘图函数 1.创建画布与坐标轴 import matplotlib.pyplot as plt# 创建画布和坐标轴 fig, ax plt.subplots() # 默认1行1列,返回Figure对象和Axes对象 2.绘制线图 x [1, 2, 3, 4] y [10, 20, 15, 25]# 绘制线图 ax.plot(x,…

系统架构设计前的多角度思考

首先,从需求分析入手,不仅关注当前功能,还要考虑业务未来的扩展方向。比如数据量预估增长多少?这些都是影响架构的重要因素。 然后是架构设计原则,比如分层设计、模块化、高内聚低耦合等。比如如何划分服务边界&#x…

leetcode230.二叉搜索树中第k小的元素

中序遍历,第k次出现的数值就是结果 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left…

运筹说 第134期 | 矩阵对策的解法

上一期我们了解了矩阵对策的基本理论,包含矩阵对策的纯策略、矩阵对策的混合策略和矩阵对策的基本定理。 接下来小编将为大家介绍矩阵对策的解法,包括图解法、方程组法和线性规划法三种经典方法。 01 图解法 本节首先介绍矩阵对策的图解法,…

Python贝叶斯分层模型专题|对环境健康、医学心梗患者、体育赛事数据空间异质性实证分析合集|附数据代码

全文链接:https://tecdat.cn/?p41267 在大数据时代,多水平数据结构广泛存在于环境健康、医学研究和体育赛事等领域。本专题合集聚焦贝叶斯分层模型(Hierarchical Bayesian Model)的创新应用,通过氡气污染数据与 季后…

NOI2015提高组.子串

题目 520. 子串 思路 设计状态表示 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示 a a a的前 i i i个字符, b b b的前 j j j个字符, 并且已经分割了 k k k个子串的所有方案, 将状态划分为包含第 i i i个字符和不包含第 i i i个字符, 不包含第 i i i个字符的状态是 f [ i…

医疗智能体通信整合-大模型训练中沟通优化策略研究

一、引言:医疗模型训练的沟通困境 1.1 医疗 AI 发展背景 在数智化浪潮的推动下,医疗 AI 正以前所未有的速度融入现代医疗体系。从智能影像诊断助力医生精准识别病灶,到基于大数据分析的个性化药物研发,医疗 AI 在提升医疗效率、改善医疗质量方面展现出巨大潜力。据相关数据…

存储管理(一)

目录 一、存储管理的功能 1.地址映射(地址重定位) 2.主存分配和回收 3.存储保护 4.主存扩充(虚拟存储) 二、程序的装入与链接 程序的装入: 程序的链接 三、连续分配方式 单一连续分配 固定分区分配 动态分…

SpringBoot学习笔记3.27

目录 实战篇第二课 1.注册参数的校验: 学习过程中遇到的问题: 1.什么是正则表达式 2.怎么自定义异常? 1. 创建全局异常处理类 2. 定义响应对象 3. 使用 ExceptionHandler 4. 设置响应状态码 5. 返回统一响应 6. 测试全局异常处理 …

基于springboot+vue的游戏账号交易系统的设计与实现

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

小测验——合并多个网格文件调用相机参数进行适配

文章目录 一、前言1.1 对于rule1.2 对于ask、agent、edit1.3 对于没有notepad二、代码展示一、前言 1.1 对于rule 对于.cursorrules里面的文件内容,就是从提示词、项目简介、技术架构、目录结构、代码规范这几方面进行介绍 1.2 对于ask、agent、edit 切换模式在聊天框下方…

敏捷测试(Agile Testing)

敏捷测试(Agile Testing) 敏捷测试是在敏捷开发(Agile Development)环境下进行的软件测试方法,强调快速反馈、持续测试、团队协作,以确保软件质量贯穿整个开发周期。与传统瀑布模型不同,敏捷测…

FreeRTOS内核实现与应用学习之6——多优先级

在FreeRTOS中,数字优先级越小,逻辑优先级也越小;在任务创建时,会根据任务的优先级将任务插入就绪列表不同的位置。 相同优先级的任务插入就绪列表中的同一条链表中。 要想任务支持优先级,即只要实现在任务切换&#xf…

【C++篇】C++入门基础(二)

💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习! 👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对C感兴趣的…

Mysql架构之日志讲解:redo log,undo log,bin log 日志

一、buffer pool缓冲区 讲日志之前,我们要先认识一下buffer pool缓冲区。 mysql想完成数据的修改,会先从存储引擎层读取数据,把数据读取到服务层进行数据的修改,再通过存储引擎层把数据更新到数据库中。 mysql每次读取数据都会…

容器主机CPU使用率突增问题一则

关键词 LINUX、文件系统crontab 、mlocate根目录使用率 There are many things that can not be broken! 如果觉得本文对你有帮助,欢迎点赞、收藏、评论! 一、问题现象 业务一台容器服务器,近期经常收到cpu不定期抖动告警&#x…

simpleITK - Setup - matplotlib‘s imshow

使用 matplotlib 显示内联图像 在此笔记本中,我们将探索使用 matplotlib 显示笔记本中的图像,并致力于开发可重复使用的函数来显示 SimpleITK 图像的 2D、3D、颜色和标签叠加层。 我们还将研究使用需要输入图像重叠的图像过滤器的微妙之处。 %matplot…

Github 热点项目 awesome-mcp-servers MCP 服务器合集,3分钟实现AI模型自由操控万物!

【今日推荐】超强AI工具库"awesome-mcp-servers"星数破万! ① 百宝箱式服务模块:AI能直接操作浏览器、读文件、连数据库,比如让AI助手自动整理Excel表格,三分钟搞定全天报表; ② 跨领域实战利器:…

硬件老化测试方案的设计误区

硬件老化测试方案设计中的常见误区主要包括测试周期不足、测试条件过于单一、样品选择不当等方面。其中,测试周期不足尤为突出,容易导致潜在缺陷未被完全暴露。老化测试本质上是通过加速产品老化来模拟长期使用状况,因此测试周期不足会严重削…

CSS学习笔记5——渐变属性+盒子模型阶段案例

目录 通俗易懂的解释 渐变的类型 1、线性渐变 渐变过程 2、径向渐变 如何理解CSS的径向渐变,以及其渐变属性 通俗易懂的解释 渐变属性 1. 形状(Shape) 2. 大小(Size) 3. 颜色停靠点(Color Sto…