js中多let与var

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

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

相关推荐
朝朝辞暮i29 分钟前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
小师兄吃牛肉1 小时前
C语言篇:宏
c语言·开发语言
郑同学的笔记2 小时前
【c++随笔28】strcmp 和 memcmp对比
开发语言·c++
言乐62 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
weixin_307779132 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
kakakahahahaha2 小时前
Windows C盘临时文件清理:%temp%、Windows Temp、Prefetch、Windows.old与hiberfil.sys处理指南
c语言·开发语言·windows
朝朝辞暮i3 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
沙漠之主3 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
hasty3 小时前
不上传新包,也能改变用户拿到的版本:npm dist-tag 的 OIDC 权限治理
前端·npm·node.js
朝朝辞暮i3 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法