JavaScript基础学习(八)-变量的声明

var let const声明变量

var

变量foo用var声明,会发生变量提升,即脚本开始运行时,变量foo已经存在了,但是没有值,所以会输出undefined

// var 的情况
console.log(foo); // 输出undefined
var foo = 2;

变量提升:当栈内存(作用域)形成,js代码自上而下执行之前,浏览器首先会把所有带有“var”和“function”关键词的进行提前声明或者定义,这种处理机制叫做变量声明

//声明(declare): 
var a;(默认值undefined)

//定义(defined):  
a=12;(定义其实就是赋值操作)

变量提升阶段

  • 带“var”的只声明未定义
  • 带“function”的声明和定义(赋值)都完成了

let

变量bar用let命令声明,不会发生变量提升,这表示在声明它之前,变量bar是不存在的,这时如果用到它就会抛出一个错误

// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;

ES6在附录B里规定,浏览器有自己的行为方式

  • 允许在块级作用域内声明函数
  • 函数声明类似于var,即会提升到全局作用域或函数作用域的头部
  • 同时,函数声明还会提升到所在的块级作用域的函数声明当中
    注意:上面的三条规则只对ES6的浏览器的实现有效,其他环境的实现不用遵守,还是将块级作用域的函数声明当作let来处理

const

const 实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。

  • 对于简单类型的数据(number、boolean、string等),值就保存在变量指向的那个内存地址,因此等同于常量
  • 对于复合类型的数据,变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容