var let const 三者的区别与应用

    var 全局作用域 具有变量提升

    let 块级作用域 不具有变量提升

    1.什么叫变量提升?

    在js运行机制中 代码从上到下执行

    1. console.log(a)
    2. var a = 1,
    1. console.log(a)
    2. let a = 1,

    第一种情况不会报错而第二种会报错 这就是变量提示

    2.let 块级作用域

    1. var a = 1;
    2. function fn(){
    3. let a = 2
    4. console.log(a,'a');
    5. }
    6. fn()

    尽管在全局作用域下定义了变量a 但是在函数内部定义了局部作用域a 最后打印还是局部作用域的a

    1. var a = 1;
    2. function fn(){
    3. let a = 2
    4. console.log(a,'a1');
    5. }
    6. fn()
    7. console.log(a,'a2');

    打印出来的结果是多少??

    1. const 常用来声明常量,且常量不可修改,必须初始化,存在着块级作用域

    栈(stack):栈会自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间。(基本类型:String,Number,Boolean,Null,Undefined)

    堆(heap):动态分配的内存,大小不定也不会自动释放,存放引用类型,指那些可能由多个值构成的对象,保存在堆内存中,包含引用类型的变量,实际上保存的不是变量本身,而是指向该对象的指针。(引用类型:Function,Array,Object)