最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • var、let、const三种声明变量方式之间的差异

    正文概述 掘金(毛小星)   2021-01-02   348

    var、let、const三种声明变量方式之间的差异


    • var声明的变量会挂载到window上,而let和const声明的变量不会
    var a = 'foo'
    console.log(window.a) // foo
    
    let b = 'bar'
    console.log(window.b) // undefined
    
    const c = 'baz'
    console.log(window.c) // undefined
    
    • var 存在变量提升,而let和const不存在变量提升,let和const上面的区域称为“暂时性死区”,在定义之前不可以使用
    console.log(a) // undefined
    var a = 'foo'
    
    console.log(b) // test4.html:14 Uncaught ReferenceError: Cannot access 'b' before initialization
    let b = 'bar'
    
    console.log(c) // test4.html:14 Uncaught ReferenceError: Cannot access 'c' before initialization
    const c = 'baz'
    
    • let和const的声明会形成块级作用域
    if (true) {
        var a = 'foo'
        let b = 'bar'
    }
    console.log(a) // foo
    console.log(b) // Uncaught ReferenceError: b is not defined
    
    if (true) {
        var a = 'foo'
        const c = 'baz'
    }
    console.log(a) // foo
    console.log(c) // Uncaught ReferenceError: c is not defined
    
    • 在同一个作用域下,let和const不能再次声明同一个变量,而var可以
    var a = 'foo'
    var a = 'bar'
    console.log(a) // bar
    
    let b = 'foo'
    let b = 'bar'
    console.log(b) // test4.html:34 Uncaught SyntaxError: Identifier 'b' has already been declared
    
    const c = 'foo'
    const c = 'bar'
    console.log(c) // Uncaught SyntaxError: Identifier 'c' has already been declared
    
    • let定义变量之后可以修改,而const表面上像是声明一个“常量”。const并不是保证变量的值不得改动,而是指变量指向的内存地址不得改变。对于简单数据类型(Number、String、Boolean),值就保存在变量指向的内存地址,因此等同于常量;而对于复合数据类型(主要是对象和数组),变量只是保存了指向堆内存的地址,至于堆内的数据是不是可变的,就不能控制了。
    const person = {}
    person.name = 'maoxiaoxing'
    console.log(person) // {name: "maoxiaoxing"}
    
    person = {name: 'king'} // test4.html:45 Uncaught TypeError: Assignment to constant variable.
    
    const a = ['foo']
    a.push('bar')
    a[2] = 'baz'
    console.log(a) // ["foo", "bar", "baz"]
    

    起源地下载网 » var、let、const三种声明变量方式之间的差异

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元