JS变量声明 - var,let 和 const

var

a = 1 会做什么?
如果a不存在则声明a,如果a已经存在则给a赋值


下面的代码显示了声明提升的存在:

function fn() {
  if(true) {
    console.log(a)
  } else {
    var a = 2
  }
}
fn()    // undefined

由于声明提升的存在,建议变量声明都放在函数的最开始


let

let 声明的变量只在 let 所在的代码块内有效
在声明之前使用直接报错 undefined,声明之前的区域称为『临时死区』
至此,js 的变量声明回到一个比较正常的状态,重复声明报错,在声明之前使用也报错


const

const 声明的变量只有一次赋值机会,并且必须在声明的同时赋值
const 保证的是变量对应的内存地址里的内容不变,对于简单类型的数据,值就是内容,对于复合类型的数据(对象和数组),内容是实际的数据地址
如果想保证对象不变,可以使用 Object.freeze(),同时需要递归处理对象的属性

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice阅读 1,656评论 0 2
  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    卞卞村长L阅读 631评论 0 0
  • 本文属个人笔记,不做详解,仅供参考! let命令 基本用法 ES6 新增了let命令,用来声明变量。它的用法类似于...
    R_yan阅读 29,192评论 6 18
  • 2014年11月19日下午,化学与材料科学系邀请教育部新世纪优秀人才支持计划入选者、湖南省杰出青年基金获得者、浙江...
    衡阳师范学院阅读 716评论 0 0
  • 戊戌年 戊午月 庚午日 大雾 雾,是一种很神奇特别的东西 当雾气非常大的时候,是很容易辨别的;当雾气非常小的时候,...
    左可阅读 159评论 0 0