首先在我们打开浏览器运行代码时,每打开一个页面就会分出两块内存:一个是堆内存(heap)一个是栈内存(stack)两个运行内存
堆内存(heap):主要是存放引用数据类型的值
栈内存(stack):给代码提供可执行的环境和存储基本数据类型的值
ECStack(Execution context Stack) 执行环境栈(栈内存,从内存中分配出来的一块内存)
EC(Execution Context)执行上下文(在编程语言中,代码执行,为了区分全局作用域和函数执行所处不同的作用域,目的是为了区分每个词法作用域下代码的独立性)EC 就是代码执行所处的范围
js的执行环境里的代表的每一块是:
EC(g):全局执行上下文
EC(function):函数执行的上下文
VO 和AO:在每一个执行上下文中,代码执行的时候,都会存贮一些变量:
全局上下文中的变量存储在VO
私有上下文中的变量存储在AO
GO:浏览器把一些内置的属性和方法放到了GO中,并且在全局执行上下文(EC(g))中创建了一个window变量对象,并且让其指向GO
代码是自上往下执行的,在此之前还有一个变量提升的阶段,(不会的)你们可以搜一下
2.赋值操作的三部曲:
1.先创建值
2.再创建变量
3.最后把创建的变量和值关联在一起
js的运行是会分为两种情况:一种是同步任务,一种是异步任务
同步任务:在主线程上排队进行的,按顺序执行
异步任务:不进入主线程,而进入event table执行,异步事件完成有结果后把结果回调函数放入“任务队列”(taskqueue),只有“任务队列”通知主线程某个异步任务可以执行了,该任务才会进入主线程执行
例题:
var x=12;
1. let y=13;
1. z=14;
1. console.log(window.x);
1. console.log(window.y);
1. console.log(window.z);
1. console.log(x);
1. console.log(y);
1. console.log(z);