# 05 详细解读函数底层 **Published by:** [xukai](https://paragraph.com/@xulai/) **Published on:** 2021-12-28 **URL:** https://paragraph.com/@xulai/05 ## Content 创建函数1. 开辟一个堆内存「在堆内存中开辟一个空间」,有一个16进制的地址 2. 存储的内容 + 函数体中的代码当做字符串先存储起来 + 当做普通对象也会存一些键值对 3. 创建函数的时候,声明了其作用域[[Scope]]「创建函数所在的上下文」 4. 把堆内存的地址放置在栈中,供函数名「变量」去调用 执行函数1. 形成一个私有的执行上下文EC(...),然后进栈执行 + AO(...):私有变量对象 2. 初始化作用域链 初始化THIS 初始化ARGUMENTS实参集合 形参赋值(形参是私有变量 & 当前私有上下文中声明的变量也是私有变量) 变量提升 3. 根据情况,决定当前形成的私有上下文是否会出栈释放「一般都会出栈释放」 函数再次执行,所有流程重新走一遍。「所以函数执行多次,每一次之间是没有直接关系的」代码案例分析一var x = [12, 23]; function fn(y) { y[0] = 100; y = [100]; y[1] = 200; console.log(y); } fn(x); console.log(x); ## Publication Information - [xukai](https://paragraph.com/@xulai/): Publication homepage - [All Posts](https://paragraph.com/@xulai/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@xulai): Subscribe to updates - [Twitter](https://twitter.com/onev_xu): Follow on Twitter