ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript中var、let、const概念

2022-07-04 12:36:04  阅读:151  来源: 互联网

标签:const log 作用域 JavaScript let var console 变量


JavaScript中var、let、const概念

  一、变量:

  1.var 声明:用于定义变量,可用于保存任何类型的值。在没有赋予初始值会给予一个 undefined

  2.let 声明:作用与var差不多。最大区别let声明为块级作用域,而var是函数作用域。

 function run(){
                var x=10
                if(true){
                    let y=5
                    console.log(x,y)
                }
                console.log(x,y)
            }
            run()

    由于let y作用域为块级作用域,只在if内部生效。所以超出作用域范围外报错。  

  3.const 声明:用于声明常量,且声明变量的时候必须初始化变量。如果后续修改变量会产生报错。作用域也为块级作用域。

  二、var与let区别:

  1.作用域不同,上述已经提过。

  2.let变量不会被提升,而var会被提升。

        function run(){
                console.log(num) // undefined
                var num=10
            }
// 上述代码等同于下述代码 function run(){ var num console.log(num) //undefined num=10 }

   数据提升:把所有变量声明都写到函数作用域顶部。

  let没有数据提升的能力。

  

 

 

 

 

  3.全局声明:var在全局作用域当中声明的变量是window的对象属性。而let不会。

            var name ="WangED"
            console.log(window.name)

            let age = 24
            console.log(window.age)

  

 

 

   4.for中var与let区别:

  

      for(var j=0;j<3;j++){
                console.log(j)
                setTimeout(()=>console.log(j),0)
            }

  

 

 

  

      for(let i=0;i<3;i++){
                console.log(i)
                setTimeout(()=>console.log(i),0)
            }

  

 

  主要造成差异的原因是因为:作用域不同。setTimeout为异步处理,拿到的是循环之后的值。

  var 相当于变为全局变量,会被覆盖掉,所以setTimeout拿到的是最后覆盖的值。

            // 等价于
       var j for(j=0;j<3;j++){ console.log(j) setTimeout(()=>console.log(j),0) }

  let 为块级作用域,每一个值都会存在于单独的作用域不会被覆盖掉,

       {
                let i=0
                console.log(i)
                setTimeout(()=>console.log(i),0)
            }
            {
                let i=1
                console.log(i)
                setTimeout(()=>console.log(i),0)
            }
            {
                let i=2
                console.log(i)
                setTimeout(()=>console.log(i),0)
            }

  三、使用环境:

  由于let 在很多方面都强于 var 使得代码规范性更强。所以在ES6中基本全面淘汰var转为使用let,尽量不使用var。

  而const由于强制保持变量不变的特性,可以让静态代码分析工具提前发现不合法的赋值。所以优先使用const来声明变量,在知道未来会修改变量值时候再用let。这样可以迅速发现因为意外赋值而导致的非预期效果。

 

标签:const,log,作用域,JavaScript,let,var,console,变量
来源: https://www.cnblogs.com/WangEDblog/p/16442514.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有