js基础-函数执行(调用栈、全局上下文)

本文详细解析了JavaScript代码的执行顺序与内存管理机制,包括调用栈(ECStack)、全局上下文GEC、全局对象及堆内存的概念。在预编译阶段,变量被创建但未赋值,函数在全局对象中得以保存。执行阶段则涉及变量赋值及函数执行时创建的局部上下文。深入理解这些概念对于优化JavaScript代码至关重要。
摘要由CSDN通过智能技术生成

词汇解释

调用栈(ECStack):浏览器在计算机内存中分配一块内存,专门用来供代码执行(也就是提供代码执行的环境)

全局上下文 GEC(global exection context)

全局对象(GlobalObject)

堆内存(Heap)

js代码的执行顺序

console.log(name) //undefined
var name = 'wxf'
console.log(name) //wxf

foo(1028)
function foo(num) {
    console.log(num) //1028
    console.log(n) //undefined
    var n = 10
    console.log(n) //10
}
foo(1028)

预编译阶段创建调用栈,创建VO对象。

变量会直接创建但不会赋值(所以name = undefined)。

如果有函数会创建内存存储函数并保存函数的父级(scope)和函数的执行体也就是代码块,此时函数已经被创建并保存在全局对象中(所以在foo定义前调用也可以执行)。

执行阶段

变量会被赋值

函数执行时会创建一个属于自己的上下文,也就是{}包裹的代码块,开始预编译创建变量num、n然后执行对应代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值