当前位置: 首页 > 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)
}

相关文章:

  • 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号又是什么?
  • 宿州哪有做网站的/b站推广形式