前言:
总结前三篇的内容,可以将学习路线图归纳为以下:
变量与标识符 —> 词法环境与作用域 —> 词法环境与环境记录 —> 词法环境与执行上下文
执行上下文与执行栈 —> 执行栈与任务序列 —> 事件循环入门 。
从这个路线中可以看出,Javascript进阶的基本脉络了。每个人进阶的方法都不尽相同,不过尽可能避免知识断层或是概念套路化。否则真的,不论你尝试进阶多少次,到头来可能还是竹篮打水一场空。进阶的大部分资料都来自github大佬博客、ES8标准翻译以及ES2020,博文编撰时也借鉴了不少,的确发发博客的确更容易坚持下来,哎。
言归正传,请不要忽略Javascript中的迷惑行为不要停止调戏Javascript, 举个例子,暂存死区和变量提升,这两个看起来无关紧要的概念,但实际上却涉及了非常非常重要的底层知识——环境记录,诸如此类数不胜数。 总的来说就是一定要注意避免概念套路化,如果把这些迷惑行为视作死规则、死套路,你可能错过许多重要内容。
如果还没有意识到这些概念影响到什么,可以去参考比较底层的JS源代码,看不懂没关系,主要是用所学尽可能解释这些行为,解释不了自然就意味着自己进阶时不小心遗漏什么关键概念。
下面我列举了两个特殊情形,记住这种感觉。
左值
何谓左值? 这些还是要从标识符解析开始…… 简单来说它代表了内存中的可操作空间,但是Javascript中的左值稍微特别,因为它记作Lref
,事实上,在Javascript较底层操作中,标识符和变量是真正意义上的引用关系,正因为如此,任一标识符都能够成为左值(事实上它也能够成为右值)。
见以下代码:
var a = {
a:111}
var b = a;
a.prop = a = {
b:2222}
console.log(a.prop); // undefined
console.log(b