变量提升预处理和执行上下文,如何避免变量提升

2021-09-27  本文已影响0人  9月的甜橙子

js引擎在代码执行之前会做一个预处理的工作:收集变量和收集函数
预处理工作的依据是:var和function{}
对于var username='xiaoming', 会定义username变量但是不会赋值,所以此时username是undefined
对于function{}会提前定义函数
以上预处理工作做完后,会正式执行代码

console.log(username); // undefined
var username = 'xiaoming';
console.log(username); // xiaoming

fun() // have fun!
function fun(){
  console.log('have fun!')
}

执行上下文 (execute context, EC)

代码在执行之前会进入执行环境,即执行上下文。
注意执行上下文是在执行前,而作用域是在定义时。
形成执行上下文做的工作有:

  1. 创建变量
  2. 确定this指向
  3. 创建作用域链

总结:
ECObj={
变量对象:变量,函数,函数形参,
this:{window || 调用它的对象},
scopeChain: 父级作用域链+当前的变量对象
}


如果本文对您有帮助,请给我点赞哦~ 谢谢~

上一篇 下一篇

猜你喜欢

热点阅读