前言
我为什么写这个文章?也许换个耳熟能详的话题会有更多人看吧。之前发了个tls感觉阅读量不行。
要讲ecma语法吗?我觉得还是不了吧,毕竟这些繁琐,枯燥,而且门槛低。
那讲什么好?讲一点我自己觉得大家都知道,但是可能理解不到位都东西。
我自己理解到位吗?我想不一定很到位,但是一定很有思考价值。
这是一个系列?它可能是一个系列,就从执行上下文和运行开始吧。
js难不难?看你自己都目标吧,我觉得没有简单的东西,当你思考越多,就会看到更多东西,相对以前的理解就是难的。
那就开始吧
正文
js或者ecmascript?
大家用了那么久js,有没有搞清楚规范和实现的区别呢?ECMA这个组织定义了这个语言的规范,Javascript是这个规范的一个实现。这意味着,他可以有很多实现的可能,只是Javascript是其中一个最热门的实现。我们通常说的ecma规范,那指的是一种口头协议规范,通常我们说javascript语言,那指的是已经实现了ecma某个规范的一种语言。
在这个基础上,执行上下文就是ecma规范里面提到的一个抽象概念。这意味着,这东西不是一个具体已经实现出来的东西,他仅仅只是一个抽象模型,具体在计算机内部是怎么编译运行,以什么样的面向对象代码呈现,那应该是引擎(v8)实现的细节的内容。
那么执行上下文的意义在于,它可以给一个抽象模型,让我们更简单的预测js的运行机制。同时,执行上下文对后续理解js内存,垃圾回收,闭包等具有深刻意义,他可以帮助我们在不需要很了解基础底层情况下去分析内存,执行过程。
js代码是如何工作的?
为了不复杂化思路,我们可以暂时把js运行过程分成上图三