跳至主要內容

var和let和const

狮子...大约 1 分钟面试JavaScript

  • 定义

    • var定义的变量;
    • let定义的变量;
    • const定义的常量
  • 作用域

    • var作用域是整个封闭函数,是全域的;
    • let作用域是在块级或者字块中;
    • const跟let一样作用于块级作用域
  • 变量提升

    • 不论通过var声明的变量处于当前作用于的第几行,都会提升到作用域的最顶部;var完成了声明和初始化,初始化的值为undefined;function完成声明、初始化和赋值;
    • 只要块级作用域内存在let,它所声明的变量就会绑定在这个区域,但是let声明的变量不会在顶部初始化,解析let那一行才初始化或者初始化和赋值,凡是在let声明之前使用该变量都会报错not defined,称为暂时性死区
    • const没有变量提升,声明时必须初始化(赋值),重复声明会报错,声明的常量不可改变
  • 重复声明

    • 同一作用域内,var可以
    • 同一作用域内,let不可以
    • 同一作用域内,const不可以
  • 内存分配

    • var会先直接在栈内存分配内存空间,等执行实际语句的时候,再存储对应变量,如果是引用类型,那么会在堆内存开辟一个空间,栈内存指针指向堆内存;
    • let不会预分配,而且会检查,相同变量名则报错;
    • const也不会预分配,const不可修改,但可以修改对象里的属性
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5