- result[0] 函数的父执行环境是 EC(kun) ,这个 VO(kun) 里面的 i 值 是 0。
- result[9] 函数的父执行环境是 EC(kun) ,这个 VO(kun) 里面的 i 值 是 9。
第二点:关于作用域链,也就是 scopeChain ,result 中的函数的 链表形式仍然是下面这种形式:
AO(result[i]) --> AO(kun) --> VO(G)但不一样的是,对应节点的存储地址不一样,相当于是 10 个新的 AO(kun)。而每一个 AO(kun) 的节点内容中的 i 值是不一样的 。所以总结就是:执行 result 数组中的 10 个函数时,运行10 个不同的链表,同时每个链表的 AO(kun) 节点是不一样的 。每个 AO(kun) 节点中的 i 值也是不一样的 。
所以输出的结果最后显示为 0 到 9。
六、总结通过对底层实现原理的分析,我们可以更加深刻的去理解函数的执行机制,从而写出高质量的函数 。
如何减少作用域链(链表)的查找
比如很多库,像JQ 等,都会在立即执行函数的最外面传一个 window 参数 。这样做的目的是因为,window 是全局对象,通过传参,避免了查找整个作用域链,提高了函数的执行效率 。
如何防止栈溢出?每一次执行函数,都会创建函数的执行环境,也就意味着占用一些栈内存,而栈内存大小是固定的,如果写了很大的递归函数,就会造成栈内存溢出,引发错误 。
我觉得,我们要去努力的达成这样一个成就:
做到当我在手写一个函数时,我心中非常清楚的知道我正在写的每一行代码,其在内存中是怎么表现的,或者说其在底层是如何执行的,从而达到** 眼中有码,心中无码** 的境界 。
如果能做到这样的话,那还怕写不出高质量的函数吗?
【如何编写高质量的 JS 函数】
推荐阅读
- 淘宝怎么看自己是否违规降权 淘宝如何知道自己是否降权
- 如何看房间风水
- 家居住宅财富运势:如何寻找财位与如何催财
- 楼房客厅风水
- 淘宝新品怎么做起来 淘宝新品如何快速推广
- 老年人如何喝茶才能养护健康(4):昼夜变化,换茶得当
- 老年人如何喝茶才能养护健康(3):茶道养生,身心兼修
- 老年人如何喝茶才能养护健康(1):发酵茶,养脾胃
- 如何投诉淘宝平台以及商家 淘宝店铺怎样投诉的
- 灵活就业人员如何领取社保补贴?看了这篇就明白
