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)
代码在执行之前会进入执行环境,即执行上下文。
注意执行上下文是在执行前,而作用域是在定义时。
形成执行上下文做的工作有:
- 创建变量
- 确定this指向
- 创建作用域链
总结:
ECObj={
变量对象:变量,函数,函数形参,
this:{window || 调用它的对象},
scopeChain: 父级作用域链+当前的变量对象
}
网友评论