一,执行上下文
js代码执行时,会为当前代码创建相应的执行环境
1,执行上下文:可以理解为当前代码的运行环境
2,执行上下文栈:按照函数的调用顺序来管理执行上下文,栈底永远是全局上下文,栈顶是当前正在执行的函数 特点:先进先出
注意:函数执行时即函数调用才会创建执行上下文
4,每一个执行上下文都有一个与之关联的变量对象和一个作用于链
二,变量对象
变量对象主要是用来存储被定义在上下文中的变量和函数声明
1,变量对象创建过程
--建立arguments对象
--检查当前上下文的函数声明
--检查当前上下文的变量声明
2,js代码的执行分为两个部分
--代码编译阶段:将代码翻译成可执行代码 预编译:声明提升
--代码执行阶段
重点:声明提升
声明提升:将所有的变量声明和函数声明提升到最前面,记得是函数声明,函数表达式是不会声明提升的。
规则:
1)函数声明整体提前
2)变量声明提前,赋值留在原地
3)函数会首先被提升,然后才是变量
4)函数声明有冲突,会覆盖,变量声明有冲突,会忽略
三,作用域链
作用域:指定变量与函数的可访问范围
1,作用域类型:
--全局作用域:无法访问到局部作用域中的变量
--函数作用域:局部作用域只在当前的函数内部中使用
--块作用域:{}中的语句集,ES5没有块作用域,ES6添加了块作用域
2,[[scope]]属性 :虚拟属性,无法访问和修改,函数创建时生成的属性,保存着这个函数的所有父级执行上下文环境中的变量对象的集合
3,作用域链=自己本身的变量对象+[[scpoe]]
4,变量函数的访问规则:
--沿着作用域链从里向外查找
--查找会在找到第一个匹配的标识符时停止
领取专属 10元无门槛券
私享最新 技术干货