js高级课程1

数据存储方式:
创建一个基本的数据类型,把数据存储在栈里面;如果创建引用数据类型,则把数据存储在堆里面,但会在栈里面存储该数据类型的地址(地址是字符串)。
栈:存储基本数据类型,存储用户创建引用数据类型在堆的地址(地址是字符串)。
堆:存储引用数据类型,也可以存储包含基本数据类型的对象。

EC——execution context:执行上下文:当前环境下变量的取值
功能:
代码执行之前的准备工作,确定当前环境下变量的取值

分类:
全局上下文:打开一个新的窗口,就会创建一个新的全局上下文(关闭即销毁)
局部上下文:调用函数时就会创建一个局部上下文(函数执行完,销毁)
eval上下文(了解):可以解析字符串中的JS代码

变量提升:var声明的变量(除函数内),值提升变量的声明。
函数提升:字面量声明的函数,提升整个函数体。

执行上下文的生命周期:
1.创建(调用的前一刻):变量和函数的提升
2.执行:函数体的代码(改变当前变量和全局变量的值)
执行栈:存放执行上下文(最底的是GO,最上面是正在调用的函数)
注:FILO、进栈(压栈)、出栈 规则:先进后出,最底的是最先进入的
3.销毁

全局执行上下文:
1.全局对象window(GO——Globel Object)
2.提升

局部执行上下文:
1.创建局部对象(AO——Active Object)
2.预编译
a>形参 变量 (提升)
b>形参 变量赋值 undefined
c>形参和实参相统一
d>函数提升
e>确定this的指向(由调用者确定)
f>确定作用域(词法环境,在哪里声明,就确定在哪里)
g>初始化作用域链
3.执行函数体代码

暂时性死区的出现:
var i = 0;
function f70() {
console.log(i);//(报错i is not defined)
let i = 0; //暂时性死区
// 告知当前AO拥有该变量
}
f70();

作用域与执行上下文的区别:
作用域:是静态的,写完代码时就确定好了个数。
执行上下文:是动态的,函数被调用一次就创建一个。

作用域链(Scope Chain):如果作用域链在AO里,则先在AO里面找变量的值,如果其中没有,则会找祖先中是否含有变量,如果都没有,则会在GO内找,除函数外(函数的找值,是从函数声明的位置的祖先开始)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值