node(变量声明,常量声明,变量提升,声明变量)

本文详细介绍了ES6中的变量声明,包括let和const的关键特性。let用于块级作用域的变量声明,不允许重复声明且无变量提升;const则用于声明常量,一旦赋值不可更改,同样具有块级作用域且不会变量提升。通过实例展示了let、const与var的区别,并解释了变量提升的概念。
摘要由CSDN通过智能技术生成

变量声明

let

变量声明let:ES6新语法,用来声明变量

        作用

        声明一个块级作用域的本地变量

        可以设置初始值

【注意点1-不允许重复声明】

        let不允许在相同作用域内,重复声明同一个变量。

【注意点2-有块级作用域】  

         它的用法类似于var,但是所声明的变量,只能在let命令所在的代码块内有效。

         在下面代码块之中,分别用let和var声明了两个变

 【注意点3-不会变量提升】

           var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为underfined。

          这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。

          为了纠正这种现象,let命令改变了语法行为,它声明的变量一定要在声明后

【总结】

         1.不能重复声明

         2.有块级作用域

         3.不会变量提升

<script>
        
        // 语法:声明变量
        //  声明并设置初始值
        let y = 10
        console.log(y);
       
        // 重新赋值
          y ="小黄说自己是废物"
        // 打印结果
        console.log(y); //小黄说自己是废物
        // 【注意点1-不允许重复声明】
        // let不允许在相同作用域内,重复声明同一个变量。
        // function func() {
        //	let a = 10;	
        //	var a = 10;	}
        // function func(){
        //	let a = 10;	
        //	let a = 1;	}

        
{
            let a = 10;
            var b = 1;
            console.log(a);//10
            console.log(b);//1
        }
           // console.log(a); //undefined
           // console.log(b); //1
           // 结果let声明的变量报错,var声明的变量返回了正确的值。
           // 这表面,let声明的变量只在它所在的代码块有效。
           // console.log(a); //a is not defined
           //console.log(b); //1

          
        // var的情况
         console.log(foo);
          var foo =2; //undefined
          // let的情况
          console.log(bar);//Cannot access "bar’ before initialization(无法在初始化之前访问变 
          let bar = 2;
         
 
    </script>

 

 

 var

<script>
        // 【变量声明var】
        // var现在基本不用它,但是看到了你得认识他哦。

        // 【作用】
        // 1.设置变量
        // 2.和let非常类似

        // 【语法】
        // 1.声明变量 var food
        // 2.变量声明+初始值
        var noodle ='小黄不行'
        // 3.重新赋值
        noodle ='小黄很不行'
        console.log(noodle);//兰州拉面

        // 【注意点1:变量会提升】 
        console.log(num);
         var num = 10;

        // 【注意点2:没有块级作用域】
         for(var i = 1; i < 5 ; i++){
        console.log('循环内'+ i);
         }
        console.log('循环外'+ i);
        </script>

 

 

常量声明

【常量声明const】

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

【注意点1-基本类型数据无法重新赋值】

         【注意点2-必须设置初始值】

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

        const foo;

        console.log(foo);

       Missing initializer.(缺少初始值)

        只声明不赋值,就会报错。

        【注意点3-有块级作用域】

         const的作用域和let命令相同:只在声明的块级作用域内有效

【注意点4-不会变量提升】

         const命令声明的常量也是不能提升,同样存在暂时性死区,只能在声明的位置后面使用。

【注意点5-不能重复声明】

【总结】

         1.基本数据类型无法重新赋值(引用类型可以更改内容)

         2.必须设置初始值

         3.有块级作用域

         4.不会变量提升

         5.不能重复声明 -

<script>
        

        // 【语法】
        // 声明并设置初始值 
        const y = 10;

        
         const PI =3.1415;
        console.log(PI);//3.1415
        // PI = 3;
        // console.log(PI); //Assignment to constant variable.(赋值给常量变量。)

        
        // const foo;
        // console.log(foo); //Missing initializer.(缺少初始值)
        // 只声明不赋值,就会报错。

        
         if(true){
        const MAX =5;
        console.log(MAX);
         }
        // console.log(MAX); // MAX is not defined

        
         if(true) {
        console.log(MAX); //Cannot access 'MAX' before initialization
         const MAX =5;
        }
        </script>
        

 

 

变量提升

<script>

        // 【变量提升】

        // 变量提升即将变量声明提升到它所在作用域。

        // 通过var定义(声明)的变量,在定义语句之前就可以访问到。

        console.log(a); //underfined

        var a = 1;

        //  因为有变量提升的缘故,上面代码实际的执行顺序为:

         var a;

        console.log(a); a = 1;

        var b =4

        function fn() {

            console.log(b);

            var b = 5

        }

        fn()

        </script>

 

声明变量

 <script>

    // 在const中,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。

    // 对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。

    // 但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针

    // const只能保证这个指针是固定的(即总是指向另一个固定的地址)。

    // 基本数据类型无法重新赋值。

    // 引用类型(对象、数组...),可以更改内容。

    // (注:不能改的是栈)

    const a = [];

    a.push('过过过');//可执行

    console.log(a);

    console.log(a.length); //1

    a.length = 0;//可执行

    console.log(a.length); //0

    a =['冲冲冲'] //Assignment to constant variable.(分配给常量变量。)

    console.log(a);

    //上面的代码中,常量a是一个数组,这个数组本身是可写的,但是如果将另一个数组赋值给a,就会报错。

    </script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值