js javascript变量提升

本文详细探讨了JavaScript中var、let及const关键字的区别,重点分析了变量提升的概念及其对编程的影响,并通过具体示例展示了不同变量声明方式的特点。
var:变量提升(无论声明在何处,都会被提至其所在作用域的顶部)
let:无变量提升(所在的块内,未到let声明时(即let声明之前),是无法访问该变量的(not defined)),let变量不能重复声明(报错has already been declared)
const:无变量提升,声明一个基本类型的时候为常量,不可修改;声明对象可以修改
<script>
    var a = 1;
    function fn() {
        console.log(a)//undefined
        a = 2;
        console.log(a)//2
        var a = 3;
        console.log(a)//3
    }
    /* var声明变量提升到作用域顶部
    fn等价于 
    function fn() {
        var a;
        console.log(a)//undefined
        a = 2;
        console.log(a)
        a = 3;
        console.log(a)
    }
    */

    function fn2() {
        //console.log(a)//a is not defined,let声明之前不能使用
        let a = 4;
        //let a = 5;//a has already been declared,在同一个作用域内let不能重复声明如果{let a=5;}就可以,{}内的let声明作用域只在{}有效
        console.log(a)//4
    }

    function fn3() {
        console.log(a)//1
        a = 6;
    }

    fn();
    fn2();
    fn3();
    console.log(a);//6
</script>

 还有以下例子,可以看出函数也存在提升一说:

<script>
    console.log(fn);//ƒ fn() {}
    var fn = 1;

    function fn() {}

    console.log(fn);//1

    /*函数提升,提升到作用域最前
    等价于
    var fn = undefined;

    function fn() {}

    console.log(fn);
    fn = 1;
    console.log(fn);
    */
</script>

 具体的提升可以参照:https://zhuanlan.zhihu.com/p/28140450

转载于:https://www.cnblogs.com/lcawen/p/8777630.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值