找回密码
 立即注册
首页 业界区 业界 let,const与var的区别

let,const与var的区别

笃扇 2025-6-6 10:01:06
1.let和const 与 var 在变量提升上的区别

let和const与var一样都存在变量提升(在编译阶段变量会被提升至作用域的顶部,但不会被赋值,类似:let a),而const和let存在暂时性死区( 从变量进入作用域的那一刻,到变量被声明并初始化的那一行代码执行完之前)在声明之前不能被访问
  1. //  输出为undefined,
  2. //  原因是var 变量的声明被提升到作用域顶部,但不会赋值,因此访问时是 undefined
  3.     console.log(a);
  4.     var a = 10;
  5. //  输出报错:Cannot access 'b' before initialization
  6. //  因为b变量的声明被提升到作用域顶部,但不会赋值,且存在暂时性死区,不能被访问,所以报错
  7.     console.log(b);
  8.     let b = 20;
复制代码
 

2.let和const 与 var 在作用域上的区别

var的作用域:在函数内部则是函数作用域,在函数外部则是全局作用域,
let和const的作用域是块级作用域, 即它只在 {} 内可访问
  1.     if (true) {
  2.         var c = 10;
  3.         let c1 = 10;
  4.     }
  5.     //  输出c = 10
  6.     //  var 声明的变量,如果在块级作用域(如 if 或 for)内部声明,
  7.     //  它也会被提升到全局作用域,注意:var在函数作用域内则在函数作用域内声明
  8.     console.log(c);
  9.     //  输出c1 is not defined,
  10.     //  因为c1在test函数外面,不在块级作用域里面
  11.     console.log(c1);
复制代码
特例:let和const不会污染全局作用域,var 的 i 是一个全局变量,因此所有函数引用的都是最终的 i
  1. var arr = [];
  2. for (var i = 0; i < 10; i++) {
  3.   arr[i] = function () {
  4.     return i;
  5.   };
  6. }
  7. // 输出10
  8. console.log(arr[5]());
  9. var arr = [];
  10. for (let i = 0; i < 10; i++) {
  11.   arr[i] = function () {
  12.     return i;
  13.   };
  14. }
  15. // 输出5
  16. console.log(arr[5]());
复制代码
 
3.let和const 与 var 在声明变量上的区别

var能重复被声明,let和const不能被重复声明
  1.     var d = 10;
  2.     var d = 20;
  3.     //  输出d = 20
  4.     console.log(d);
  5.     let e = 10;
  6.     //  let e = 20;
  7.     //  输出Identifier 'e' has already been declared
  8.     //  因为e已经声明过了
  9.     //  console.log(e);
复制代码
 
4.let和const在值改变上的区别

let声明后的变量能重新被赋值,const声明后的值是一个常量不能重新被赋值(ps:const定义的对象内部的属性可以被改变)
  1.     let f = 10
  2.     f = 20
  3.     //  输出f为20
  4.     console.log(f)
  5.     const g = 10
  6.     g = 20
  7.     //  输出g为Assignment to constant variable
  8.     //  原因是g不能重新被赋值,g被声明为一个常量
  9.     console.log(g)
  10.     const obj = { name: "Tom" };
  11.     //  允许修改对象内部属性
  12.     obj.name = "Jerry";
  13.     //  输出Jerry
  14.     console.log(obj.name);
复制代码
 
 
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册