这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战
变量基础知识相关
变量包含两种不同数据类型的值
-
原始值(基本类型的值)
保存在栈(大小固定,不可动态伸缩)中,所以不可动态添加属性。
-
引用值(引用类型的值)
保存在堆(大小不固定,可动态伸缩)中,所以可以动态添加属性。
词法分析(变量提升的原理分析)
- 阶段1:词法分析
- 阶段2:逐行执行js代码
词法分析的具体步骤
在函数运行的瞬间,会生成一个活动对象AO。
-
分析函数参数
- 将函数形参添加为AO属性,此时值为undefined
- 接收函数的实参,并覆盖原属性值
-
分析变量声明/分析局部变量
- 若AO中不存在与声明的变量所对应的属性,则添加AO属性为undefined
- 若AO中已存在与声明变量所对应的属性,则不做任何修改(如果实参有)
-
分析函数声明
- 若AO中存在与函数名所对应的属性,则不做任何修改
AO对象(在函数进入调用栈时,AO代替了VO的角色)
-
js引擎刚刚读取全部js代码时,会在内存中生成一个Active Object对象,简称AO对象。
-
特点:
- 不可读、不可操作、不可获取
- 在函数中声明的局部变量,会成为AO对象的属性,并且属性的初始值是undefined
<script>
var bb = 1;
function xxfn(){
console.log(bb);
var bb = 123;
console.log(bb);
}
xxfn();
</script>
| 代码 | 词法分析阶段 | js代码执行阶段 |
|---|---|---|
| 最开始 | AO.bb = undefined | |
| var bb = 1; | ||
| function xxfn(){ | ||
| console.log(bb); | //输出undefined | |
| var bb = 123; | AO.bb = 123 | |
| console.log(bb); | //输出123 | |
| } | ||
| xxfn(); |
例题分析
cloud.tencent.com/developer/a…
因为对象是引用变量,所以赋值是传递的地址给他,
你想想看 如果加上那行代码 然后this.sgsFlowinfoWithBLOBs会变成什么 然后 响应式就会导致缺失