咨询热线:15320608695 联系人:方潘安 地址:新疆维吾尔自治省乌鲁木齐市乌鲁木齐 市市沙依巴克区西虹路2号
一、作用域是什么 (学习笔记)—— 《你不知道的JavaScript》
来源:ope合作伙伴 发布时间:2019-11-21 点击量:443
因为全部都是文字不太好理解,所以尽可能地把所有的文字都画成了图,便于理解。
作用域是什么
传统编译流程:
JavaScript 引擎会在语法分析和代码生成阶段,通过特定的步骤,对运行性能进行优化。包括冗余元素优化等。
JavaScript 编译,大部分情况下,发生在代码执行前的几微妙(甚至更短)。
理解作用域
引擎、编译器、作用域
var a = 1;
以上代码,经历了两个不同的声明:
编译器在编译时的处理引擎在运行时的处理以 var a = 1; 为例,演示引擎、编译器、作用域三者是如何工作的
变量的赋值操作会执行两个动作:1. 编译器在当前作用域中声明一个变量; 2. 运行时引擎在作用域中查找该变量,找到便赋值,找不到抛出异常。
LHS && RHS
先来张图,解释什么是 LHS、RHS
看下面代码,加深理解
console.log(a); // 对 a 的引用是 RHS 引用。因为没有对 a 赋值,而是查找并取得 a 的值。
a = 2; // 对 a 的引用是 LHS 引用。不用关心 a 的值是什么,只需要为 = 2 这个赋值操作找到一个目标。
引擎和作用域的对话
以下面代码为例:
function foo(a) { console.log(a);}foo(2);
小测验
把自己当做引擎,同作用域进行一次“对话”。
function foo(a) { var b = a; return a + b;}var c = foo(2);
1. 找到其中所有的LHS查询。(这里有3处!)
2. 找到其中所有的RHS查询。(这里有4处!)
作用域嵌套
当一个块或函数嵌套在另一个块或函数中时,就发生了作用域嵌套。因此,在当前作用域中无法找到该变量时,引擎会在当前嵌套的作用域的外层继续查找,直到找到该变量,或抵达最外层作用域(全局作用域为止)。
看以下代码:
function foo(a) { return a + b;}var b = 1;foo(2);
对 b 进行的 RHS 引用无法在函数 foo 内部完成,但可以在上一级作用域(在这个例子中就 是全局作用域)中完成。
我们来模拟一下以上代码的引擎与作用域的对话。
注:以上所有的文字、代码都是本人一个字一个字敲上去的,图片也是一张一张画出来的,转载请注明出处,谢谢!
相关产品
-
调研结果显示,虽然这次“永恒之蓝”勒索病毒给很多政企机构带来了灾难性的后果,但并不是所有机构都遭了殃,大多数金融机构等大型政企机构实现了不断网、零感染、不中断业务的应急处置。
-
原告方代理人河田英正律师称:“单是控告违宪容易吃闭门羹,不过将明确(安保法)对各种各样的原告构成的具体权利侵害,争取胜诉。”
-
大多数辖区的消费者支出上升,在费城、里士满、亚特兰大和旧金山联储辖区增长温和。但一些辖区表示,可能由于金融市场动荡、经济存在不确定因素以及不愿扩大现有债务,消费者似乎不愿意花钱。
-
严禁学校以建校费、教育基金费等名义向学生家长收取与招生入学挂钩的各类捐资助学费、赞助费和择校费;高中招生严格执行“三限”政策。
-
在脱欧公投拉票期间与前伦敦市长约翰逊并肩合作的戈夫指出,他之所以“抛弃”支持脱欧的旧友约翰逊独立竞选保守党领袖,是因为如果约翰逊当选新首相,就是“对英国的背叛”。
-
同时,这个网络也为“向阳红10”的船舶保障工作作了很大贡献。“向阳红10”船装备助理张元元介绍,“向阳红10”船气象资料的接收就是通过这个网络。通过海事卫星网络,国内还可以实时了解“向阳红10”船的经纬度、航速、航向、航行轨迹等信息。
-
唐珂指出,当前,“菜篮子”产品供应总体宽裕。尽管新年伊始中东部地区大范围雨雪和随后的寒潮天气对蔬菜生产流通造成了一定影响,但由于在田面积增加、冬储菜储备丰富,后期如果不再发生大范围的极端天气,春节期间包括蔬菜在内的鲜活农产品供应有保障,总体价格出现大幅上涨的可能性不大。
-
《复仇者联盟3:无限战争》是漫威自2008年推出的《钢铁侠》算起整个MCU的收尾之作,将集结过往10年中超过50位英雄登场,影片分上下两部,在本片中已经确认会有不少超级英雄会死亡或是隐退,本片北美定于4月25日正式上映,国内仍未定档。
热点资讯
- 买RTX20系列显卡送《战地5》活动暂不支持大陆地区2019-11-20
- 浙江慈溪10元一个的蜜梨本周上市2019-11-17
- 再续经典:《闪灵》续集女主公布,2020年初上映2019-11-19
- ofo盈利模式仍不清晰:拖欠多家供应商货款2019-11-17
- 苹果CEO库克:在涉及公司核心理念的问题上会坚持自己的立场2019-06-17
- 产学研结合促进新发展竞争战略研讨会正式启动2019-06-17
- 展望未来的七大机构:警惕政策绩效的黑暗期2019-11-20
- 《幻想全明星》枪战求生新皮肤“冰川尖刺-RPG”曝光2019-11-10