这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战
特殊的节日,也要继续更文呀,祝大家七夕快乐哦作为一个成熟的程序员,分分钟new一个对象
大家好,我是圈圈,热爱前端,喜欢分享,很感谢这个活动,我希望我可以坚持,感谢你那么好看,还看了我的文章,欢迎大家评论区交流切磋~
JS代码运行在浏览器中
ECStack(Execute Context Stack)执行环境[栈内存]
【栈内存】的作用
- 作用1:供代码执行
- 作用2:存储原始值和变量
EC(G)(Execution Context Global) 全局执行上下文
- 目的:区分代码执行的环境
- 全局代码都会在全局上下文中执行 VO(G)(Variable Object Global) 全局变量对象
- 存储当前上下文中声明的变量的
- 计算机当中的内存 ram rom
- 内存:栈内存Stack、堆内存Heap
- 内存条中分配出来的运行内存 [CPU]
- 前端性能优化:内存优化
等号=赋值的操作
1.创建一个值(原始值&对象)
- 原始值:在栈内存中找个位置存储起来
- 对象:单独开辟一个堆内存空间;用来存储对象中的成员等信息
2.声明变量 declare,把声明的变量存储到当前上下文的“变量对象VO/AO”
var/function/let/const/import....
3.让变量和创建的值关联在一起 Defined 定义
对象类型[非函数]赋值操作
- 开辟一个堆内存空间[在堆内存中开辟一个单独的空间] ->会产生一个共访问的地址【16进制】
- 把对象中的键值对一次存储到空间中
- 把空间地址放到栈中存储,以此来供变量的引用
window全局对象
VO(G) 全局变量对象:存储全局上下文中声明的变量
JS中运算符优先级 developer.mozilla.org/zh-CN/docs/…
详细解读函数的底层执行机制
大厂面试题知多少~
// 思考1
var a = {n: 1}; //->堆内存 0x000
var b = a;
a.x = a = { n:2}
console.log(a.x) //undefined
console.log(b) //
// 思考2
var x = [12, 23];
function fn(y) {
y[0] = 100;
y = [100];
y[1] = 200;
console.log(y); //[100,200]
}
fn(x);
console.log(x); // [100,23]
创建函数:
- 开辟一个堆内存【在堆中开辟一个空间】,有一个16进制的地址
- 存储的内容
- 函数体中的代码当作字符串先存起来
- 当作普通对象也会存一些键值对
- 创建函数的时候,就声明了其作用域【scope】【创建函数所在的上下文】
- 把堆内存的地址放在栈中,供函数名(变量)去调用 fn函数执行 -> 把函数体中存储的代码字符串当做代码去执行、 fn(0x000) 形成一个全新的“私有的”执行上下文 EC(FN) [进栈执行]
AO(Active Object)(FN)私有的变量对象
AO也是变量对象,他是VO的一个子集
函数中的叫AO,全局的是VO,块级上下文中的也是VO
执行函数
1.形成一个私有的执行上下文EC(...),然后进栈执行
AO(...)
函数执行之前要做的事
- 初始化作用域链 SCOPE-CHAN <EC(FN),EC(G)> 左侧:自己私有上下文 右侧:函数作用域
- 目的:后期函数上下文中代码执行,遇到变量,首先看是否为自己私有的,
- 如果不是私有的,则按照作用域链,找其上级上下文...(作用域链机制)
- 初始化this指向
- 初始化arguments[实参集合]
- 形参赋值 【形参是私有变量,会在i所有变量对象中存储】 7.变量提升 8.代码执行
前端路漫漫其修远兮,吾将上下而求索,一起加油,学习前端吧
欢迎留言讨论~