• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
smileyqp
https://github.com/smileyqp
博客园    首页    新随笔    联系   管理    订阅  订阅

(九)执行上下文&变量提升案例分析

执行上下文的三个重要属性:
  • 变量对象VO (变量;函数声明;函数的形参)
  • 作用域链(JS采用词法作用域;其作用域在其定义时候就已经决定)
  • this

在生成上下文的时候会有两个阶段

  • 第一阶段(创建阶段):
    • JS解释器会找出需要变量提升的变量以及函数,给他们开辟好内存空间
    • 函数会整个存进去
    • 变量只声明并且赋值为undefined
    • 变量提升过程中;相同函数会覆盖上一个函数并且函数优先于变量提升
b() // call b
console.log(a) // undefined

var a = 'Hello world'		//变量声明并赋值为unedfined

function b() {				//创建VO时候偶函数整个保存
	console.log('call b')
}
  • 第二阶段(代码执行阶段)
b() // call b second

function b() {
	console.log('call b fist')
}
function b() {					//变量提升;同样函数后面一个会覆盖前面一个
	console.log('call b second')
}
var b = 'Hello world'
注意
  • let不能在声明前使用;let并非是没有变量提升才不能在声明前使用;而是let提升了声明但是并没有赋值,其不能在声明前使用是因为临时死区
posted @ 2019-09-12 10:21  smileyqp  阅读(122)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3