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

js中多let与var

在 JavaScript 中,letvar 都用于声明变量,但它们有一些关键的区别。主要区别包括作用域、变量提升、可重复声明、以及在全局作用域中的行为。

1. 作用域(Scope)

  • let:块级作用域。用 let 声明的变量只在其所在的代码块 { ... } 中有效。

    { let x = 10; } console.log(x); // ReferenceError: x is not defined

  • var:函数级作用域。用 var 声明的变量在函数内可用,但如果在函数外声明,则它是全局变量。

    { var y = 20; } console.log(y); // 20

2. 变量提升(Hoisting)

  • let:存在“暂时性死区”(Temporal Dead Zone),即变量在声明前不能访问。虽然在内存中存在,但访问会导致错误。

    console.log(a); // ReferenceError: Cannot access 'a' before initialization let a = 5;

  • var:会被提升至作用域顶部,因此可以在声明之前访问,但值为 undefined

    console.log(b); // undefined var b = 5;

3. 重复声明(Redeclaration)

  • let:在同一作用域内不允许重复声明同一变量。

    let c = 1; let c = 2; // SyntaxError: Identifier 'c' has already been declared

  • var:允许在同一作用域内重复声明。

    var d = 1; var d = 2; // No error, d is now 2

4. 全局作用域中的行为

  • let:在全局作用域中声明时不会成为 window 对象的属性。

    let e = 10; console.log(window.e); // undefined

  • var:在全局作用域中声明时会成为 window 对象的属性。

    var f = 10; console.log(window.f); // 10


http://www.mrgr.cn/news/64721.html

相关文章:

  • ElasticSearch备考 -- Manage the index lifecycle (ILM)
  • 系统架构设计师(软考高级)一站式通关课程
  • 苍穹外卖WebSocket无法建立连接 (修改前端代码)
  • Web组件之 Listener (监听器)
  • 【canal 中间件】canal 实时监听 binlog
  • 如何在 Vue.js 中使用 Mock 数据:教程与技巧【前端mock】
  • 【016C】基于51单片机电子秤(LCD1602显示)
  • SpringBoot框架下:构建专业在线试题库
  • 找不到msvcp120.dll,无法继续执行代码的五种解决方法一步一步指南
  • 数据结构与算法——Java实现 52.力扣98题——验证二叉搜索树
  • spring-boot(thymeleaf前端框架,简单了解)、( 跨域请求)
  • 【LwIP源码学习5】网口接收数据处理过程
  • 数据挖掘(七)
  • 【设计模式系列】总览
  • ‌【元素周期表】氢
  • LeetCode 3226. 使两个整数相等的位更改次数
  • 11.3笔记
  • 图解大模型训练系列:序列并行1,Megatron SP
  • 图像滤波技术详解与实践应用
  • 如何评价mamba,是一个比conda更优秀的包管理器吗?
  • RSA算法:公钥加密的实现与应用
  • 考研要求掌握的C语言(冒泡排序专题)
  • [Android]从FLAG_SECURE禁止截屏看surface
  • 周报_2024/11/3
  • 访问者模式:将操作与对象结构分离的设计模式
  • 插值表达式