当前位置: 首页 > news >正文

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 defined
    console.log("报错了:",error.message)
}

function fun3(){
    if(true){
        const c=1
    }
    console.log(c)
}

try {
    fun3()
} catch (error) {
    //报错了: c is not defined
    console.log("报错了:",error.message)
}
http://www.dtcms.com/a/96435.html

相关文章:

  • Python @property 装饰器深度使用教程
  • 基于python的汽车行业大数据分析系统
  • Causal Effect Inference withDeep Latent-Variable Models
  • Docker安装MySql 8.0
  • 暴力搜索算法详解与TypeScript实战
  • JavaScript 性能优化实战:突破瓶颈,打造极致 Web 体验
  • Manus AI 与多语言手写识别技术解析
  • MFC TRACE 宏的使用说明
  • MaskFormer语义分割算法测试
  • 剑指Offer29 -- 模拟
  • 视频AI赋能水利行业生态治理,水电站大坝漂浮物实时监测与智能预警方案
  • onlyoffice实现office文件在线编辑保存
  • Docker 安装部署Harbor 私有仓库
  • Nginx 优化
  • CentOS与Ubuntu命令对比指南:从软件包管理到系统配置
  • 面向对象——开闭原则(Open-Closed Principle, OCP)
  • Spring 及 Spring Boot 条件化注解(15个)完整列表及示例
  • matlab仿真MIMO天线
  • 深度学习篇---paddleocr正则化提取
  • 系统如何查找文件?inode号又是什么?
  • 0 基础速成 AI 编程指南
  • Vue 项目中使用$refs来访问组件实例或 DOM 元素,有哪些注意事项?
  • 基础认证-判断题
  • NX二次开发刻字功能——拉伸功能
  • 【质量管理】防错(POKA-YOKE)的概念、特点和作用解析
  • 如何降低频谱分析仪的底噪
  • 并查集解题记录128最长连续序列200岛屿数量547省份数量684冗余连接
  • 【人工智能】从 Llama 到 DeepSeek:开源大模型的演进与技术对比
  • 青少年编程与数学 02-011 MySQL数据库应用 19课题、存储引擎
  • 第三卷:覆舟山决战(85-108回)