js中的变量声明var let const

在js中可以声明变量的关键字有varletconst


前言

浅浅的了解下var、let、const声明


一、var 变量

使用var定义变量,可以保存任何类型的值。若不初始化变量,变量会保存undefined

声明变量:

  var 变量名=值;

  var 变量名;

   //使用var声明变量
    var name ='名字';
   console.log(name);//名字

    // 声明变量 不赋值 可以的但不提倡
    a = 1
    console.log(a) // 1

 1.var在函数作用域中不同声明

变量a在函数内部使用var定义,调用函数fun,并给这个变量赋值,这时它就是局部变量,在函数执行结束后,变量就会被销毁,所以最后一行代码会报错,显示变量a未被定义。

    function fun() {
        // 局部变量
        var a = "hi"; 
        console.log(a);//hi
      }
      fun();
      console.log(a); //报错  ReferenceError: a is not defined

若在函数内部,不使用var,直接赋值,那这时就是全局变量,可以在函数外部访问到。

    function fun() {
        // 全局变量
         a = "hi"; 
        console.log(a);//hi
      }
      fun();
      console.log(a); // hi

2.重复声明

 使用var重复声明同一个变量也是可以的:

    function fun() {
        var a = 1;
        var a = 2;
        var a = 3;
        console.log(a);
      }
      fun(); // 3

也可以一次性声明多个变量,一次性打印多个变量,需要使用用逗号“,”隔开 

    // 一次性声明多个变量
    //用,隔开  
    var num1 = 12, num2 = 23, num3 = 24;
    // 一次性打印多个变量
    console.log(num1, num2, num3);//12 23 24

二、let 变量

let变量是ES6中新增的声明变量的方式

let关键字用来声明变量,类似于var,但有很大的区别。

1.存在块级作用域 就是花括号{}

    // 凡是有 {} 的地方都是块级作用域
    // 比如for(){}  function(){} 
    if (true) {
      let num = 10;
      var num1 = 20
    } else {
      let str3 = '今天周几?'
    }

    console.log(num);//报错 caught ReferenceError: num is not defined
    console.log(num1);//20

2.不能重复声明,同一个作用域内只能声明一次

如果混用varlet声明变量,也是不允许的,也是会报错的!

       //正常声明
      let str = "今天周几?";
     //console.log(str);//今天周几?
      // 重复声明,报错
      let str = '周二';  //报错 caught SyntaxError: Identifier 'str' has already been declared 

3.不存在变量提升,存在暂时性死区,预编译时不允许访问.

      // 不存在变量提升
      // 暂时性死区,预编译过程,就是变量声明到变量赋值之前
      // 不允许访问,访问没有意义...
      console.log(str); // Uncaught ReferenceError: Cannot access 'str' before initialization
      let str = "hello";

 三、const 常量声明

常量声明之后不允许被修改

      // 常量: 声明之后不允许被修改
      const weeks = "今天周几?";
      console.log(weeks); //今天周几?
      // 修改
      weeks = "今天星期几?"; //报错  caught TypeError: Assignment to constant variable.
      console.log(weeks);

常量不允许被修改的是地址,而不是值

基本数据类型,要重新赋值,就需要把原来的释放掉,再给新的地址

复合数据类型,对象,只修改属性,不会影响对象在堆中存储的位置

    // 声明常量对象
      const obj = {
        name: "星期",
        age: 1,
      };
      // 修改属性
      obj.age = 2;
      console.log(obj); //{name: '星期', age: 2}

      // 重新赋值,声明了新的对象,要修改地址
      obj = {
        name: "小辣椒",
        age: 3,
      };
      console.log(obj); //caught TypeError: Assignment to constant variable.

常量也是存在块级作用域的

    // 常量也是存在块级作用域
    {
      const str = '周几了?周几了?周几了?'
    }
    console.log(str);  //报错 Uncaught ReferenceError: str is not defined

总结

没有啦!先了解到这里吧....

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值