<script>
/*
1、代码分类(根据位置)
*全局代码
*局部(函数)代码
2、全局执行上下文
*在执行全局代码前将window确定为全局执行上下文
*对全局数据进行预处理
*var定义的全局变量 --> undefined --> 添加为window的属性
*function声明的函数 --> 赋值(fun) --> 添加为window的方法
*this-->赋值(window)
*开始执行全局代码
3、函数执行上下文
*在调用函数,准备执行函数体之前,创建对应的函数执行上下文对象(虚拟的,存在于栈中)
*对局部数据进行预处理
*形参变量 --> 赋值(实参) --> 添加为函数执行上下文的属性
*arguments --> 赋值(实参列表) --> 添加为函数执行上下文的属性
*var定义的局部变量 --> undefined --> 添加为函数执行上下文的属性
*function声明的函数 --> 赋值(fun) --> 添加为函数执行上下文的方法
*this --> 赋值(调用函数的对象)
*开始执行函数体代码
*/
// 全局执行上下文
console.log(a1, window.a1) // undefined undefined
a2() // a2
window.a2() // a2
var a1 = 3
function a2(){
console.log('a2')
}
// 函数执行上下文
function fn(a1){
console.log(a1) // 2
console.log(a2) // undefined
a3() // a3
console.log(arguments) // 伪数组[2, 3]
console.log(this) // 调用函数的对象,此处是window
var a2 = 2
function a3(){
console.log('a3')
}
}
// 在调用函数时,才会创建对应的函数执行上下文
fn(2, 3)
</script>
执行上下文
最新推荐文章于 2024-10-01 20:12:28 发布