var、let、const 之间的区别

这篇具有很好参考价值的文章主要介绍了var、let、const 之间的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

var、let、const 之间的区别

var

在 ES5 中 , 顶层对象的属性和全局变量是等价的 , 用 var 声明的变量既是全局变量 , 也是顶层变量。
注意 : 顶层对象 , 在浏览器环境指的是 window 对 象 , 在 Node 指的是 global 对象

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

使用 var 声明的变量存在 变量提升 的情况

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

在编译阶段 , 编译器会将其变成以下执行

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

使用 var , 能够对一个变量进行多次声明 , 后面声明的变量会覆盖前面的变量声明

var a = 20
var a = 30
console.log(a) // 30

在函数中使用 var 声明变量的时候 , 该变量是局部的

var a = 20
function change(){
	var a = 30
}
change()
console.log(a) // 20

而如果在函数内声明变量不使用var , 该变量是全局的

var a = 20
function change(){
	a = 30
}
change()
console.log(a) // 30

let

let 是 ES6 新增的命令 , 用来声明变量
用法类似于 var , 但是所声明的变量 , 只在 let 命令所在的代码块内有效

{
    let a = 20
}
console.log(a) // ReferenceError: a is not defined。

不存在变量提升

console.log(a) // 报 错 ReferenceError
let a = 2

这表示在声明它之前 , 变量 a 是不存在的 , 这时如果用到它 , 就会抛出一个错误
只要块级作用域内存在 let 命 令 , 这个区域就不再受外部影响

var a = 123
if (true) {
    a = "abc"  // 报 错 ReferenceError
    let a;
}

使用 let 声明变量前 , 该变量都不可用 , 也就是大家常说的 “ 暂时性死区
最后 , let 不允许在相同作用域中重复声明

let a = 20
let a = 30
// Uncaught SyntaxError: Identifier 'a' has altready been decltared

注意:相同作用域 , 下面这种情况是不会报错的

let a = 20
{
  let a = 30  
}

因此 , 不能在函数内部重新声明参数

function func(arg) {
    let arg;
}
func()
// Uncaught SyntaxError: Identifier 'arg' has altready been dectared

const

const 声明一个只读的常量 , 一旦声明 , 常量的值就不能改变

const a = 1
a = 3
// TypeError: Assignment to constant Variable.

这意味着 , const 一旦声明变量 , 就必须立即初始化 , 不能留到以后赋值

const a 
// SyntaxError: Missing initialtizer in const dectaration

如果之前用 var 或 let 声明过变量 , 再用 const 声明同样会报错

var a = 20
let b = 20
const a = 30
const b = 30
// 都 会 报 错

const 实际上保证的并不是变量的值不得改动 , 而是变量指向的那个内存地址所保存的数据不得改动

对于简单类型的数据 , 值就保存在变量指向的那个内存地址 , 因此等同于常量

对于复杂类型的数据 , 变量指向的内存地址 , 保存的只是一个指向实际数据的指针 , const 只能保证这个指针是固定的 , 并不能确保该变量的结构不变

const foo = {};

// 为 foo 添 加 一 个 属 性 , 可 以 成 功
foo.prop = 123 
foo.prop // 123

// 将 foo 指 向 另 一 个 对 象 , 就 会 报 错
foo = {}; // TypeError: “foo“ is read-only

其它情况 , const 与 let 一致

区别

var、let、const 三者区别可以围绕下面五点展开 :文章来源地址https://www.toymoban.com/news/detail-779475.html

  • 变量提升
    • var 声明的变量存在变量提升 , 即变量可以在声明之前调用 , 值为 undefined
    • let 和 const 不存在变量提升 , 即它们所声明的变量一定要在声明后使用 , 否则报错
  • 暂时性死区
    • var 不存在暂时性死区
    • let 和 const 存在暂时性死区 , 只有等到声明变量的那一行代码出现 , 才可以获取和使用该变量
  • 块级作用域
    • var 不存在块级作用域
    • let 和 const 存在块级作用域
  • 重复声明
    • var 允许重复声明变量,后面声明的变量会覆盖前面的变量声明
    • let 和 const 在同一作用域不允许重复声明变量
  • 修改声明的变量
    • var 和 let 可以修改已经声明的变量
    • const 声明一个只读的常量 。 一旦声明 , 常量的值就不能改变
  • 使用
    • 能用 const 的情况尽量使用 const , 其他情况下大多数使用 let , 避免使用var

到了这里,关于var、let、const 之间的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript 中的 Var、Let 和 Const 有什么区别

    ES2015(ES6)推出了许多闪亮的新功能。从 2020 年开始,我们假设许多 JavaScript 开发人员已经熟悉并开始使用这些功能。 尽管这个假设可能部分正确,但是其中某些功能可能对一些开发人员来说仍然是个谜。 ES6 附带的功能之一是添加了 let 和 const ,可用于变量声明。问题是,

    2024年02月09日
    浏览(71)
  • JS中var、let以及const关键字到底怎么用?

    在学习JS变量之后,初学者都避免不了都会一下子分不清这三个变量在代码块中的作用域范围,其实 const 简单理解它就是定义常量的,但是在实际开发中,我们却很常见它的身影。 说实话刚开始我也分不清他们的作用域范围,但是自己再去详细看一遍教程之后,其实发现还是

    2023年04月13日
    浏览(44)
  • js let和const区别

    在JavaScript中,let和const的区别主要体现在以下几个方面: 变量的可变性:使用let声明的变量可以被改变,无论是值还是类型都可以改变。而const声明的常量则不可以改变,一旦声明并初始化后,它的值就不能再改变。 声明的块级作用域:let和const都只在声明所在的块级作用域

    2024年01月19日
    浏览(87)
  • 【前端知识】JavaScript——var 与 let 的区别

    var声明的变量会自动提升到函数作用域顶部,而let不会。 在解析代码时,JavaScript 引擎会注意出现在块后面的 let 声明,只不过在此之前不能以任何方式来引用未声明的变量。在 let 声明之前的执行瞬间被称为 暂时性死区(temporal dead zone) ,在此阶段引用任何后面才声明的变

    2024年02月16日
    浏览(46)
  • const、var、let用法

    当使用 var 声明变量时,该变量的作用域是在最近的函数体内,而不是块级作用域(例如 if 语句、 for 循环等)。这意味着在函数内部,无论变量是在函数的哪个位置声明的,它都可以被访问到。 另外,使用 var 声明的变量具有变量提升(hoisting)的特性。这意味着变量声明会

    2024年02月11日
    浏览(56)
  • 深入解析JavaScript中的var、let和const

    🧑‍🎓 个人主页: 《爱蹦跶的大A阿》 🔥 当前正在更新专栏: 《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​  ​         变量的声明是编程中非常基础和关键的概念。在ES6之前,JavaScript只有var一种声明变量的方式。ES6带来了let和const来声明变量

    2024年01月20日
    浏览(45)
  • ES6知识点汇总(1)--var/let/const

    1、var 在ES5中,顶层对象的属性和全局变量是等价的,用var声明的变量既是全局变量,也是顶层变量 注意:顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象 使用var声明的变量存在变量提升的情况 在编译阶段,编译器会将其变成以下执行 使用var,我们能够对

    2024年02月12日
    浏览(50)
  • let和var区别 (最全)

    1、var是函数作用域,let是块作用域 2、var存在声明提升,let没有声明提升,但是有“暂时性死区”-JS引擎会注意到出现在块后面的let声明,在声明前直接使用会抛出ReferenceError, 3、全局作用域下,var声明的变量挂载在window,let不会 4、在for循环中使用let, let出现直线,for循环定

    2024年01月16日
    浏览(37)
  • 【34JavaScript let 和 const】JavaScript中的“let“和“const“关键字详解:作用、用法及区别

    // 使用 let 声明变量 let x = 10; // 在同一作用域内重新赋值 x = 20; // 在不同的作用域内使用 let 声明变量 function example() { let y = 30; console.log(x); // 输出:20 console.log(y); // 输出:30 } console.log(x); // 输出:20 console.log(y); // 报错:y is not defined // 使用 const 声明常量 const PI = 3.14159; // 尝

    2024年02月08日
    浏览(45)
  • JavaScript 中 let 和 var 的区别

    首先,let 和 var 都是用于声明变量的,在老版 JavaScript 中也许你会见到 var 方式来声明变量,而现如今几乎都是使用 let 进行声明,接下来看看这两个之间的区别。 1、作用域 var var 声明的变量在函数内部有效,如果在函数内部使用 var 声明一个变量,那么该变量

    2024年02月12日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包