Java教程

JavaScript中var、let、const概念

本文主要是介绍JavaScript中var、let、const概念,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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。这样可以迅速发现因为意外赋值而导致的非预期效果。

 

这篇关于JavaScript中var、let、const概念的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!