var和let,const区别总结

    技术2026-01-01  1

    var和let,const区别

    文章目录

    var和let,const区别一.var1.var属于ES5规范2.预解析3.声明提升4 作用域5.挂载对象 二.let1.let属于ES6规范2.let只在块级作用域有效3.let声明变量不会提升4.不能通过let声明和形参相同的变量5.暂时性死区6.let声明全局变量 三.const1.属于ES6规范2.声明只读常量3.必须初始化4.const本质

    一.var

    1.var属于ES5规范

    2.预解析

    var有预解析阶段,会被js解析器扫描,然后放进仓库,等待逐行代码的执行,此时var声明的变量初始值是undefined

    3.声明提升

    var会存在声明提升,当js解析器扫描到var关键字后,会将var声明的变量放进当前作用域的顶部

    4 作用域

    全局作用域或者函数作用域.

    5.挂载对象

    var 声明的全局变量会挂载到window对象上

    二.let

    1.let属于ES6规范

    2.let只在块级作用域有效

    一般一个大括号就是一个块

    for (var i = 0; i < 10; i++) { console.log(i); }; alert(i); for (let v = 0; v < 10; v++) { console.log(v); } alert(v); if(true) let a = 20; //会报错 if(true) { let a = 20; //不会报错 }

    3.let声明变量不会提升

    let声明的变量一定要在声明之后使用,否则报错。

    alert(a); var a = 2; alert(b); let b = 2; //注意:let声明的变量一定要在声明之后使用,否则报错。

    4.不能通过let声明和形参相同的变量

    function test(a) { let a = 123; console.log(a); } test(456);

    5.暂时性死区

    ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

    在暂时性死区中使用let或const声明的变量,会报错

    6.let声明全局变量

    let声明的全局变量,不会成为window的属性,并没有挂载到window对象上

    三.const

    1.属于ES6规范

    2.声明只读常量

    const常量一旦声明,常量将不能重新赋值!

    3.必须初始化

    const一旦声明,就必须立即初始化,不能留到以后赋值!

    4.const本质

    const实际上保证的,并不是值不能改变,而是指向的那个内存地址不能改变

    Processed: 0.009, SQL: 9