上面这张图来自于mdn,分别展示了栈、堆和队列,其中栈就是我们所说的执行上下文栈;堆是用于存储对象这种复杂类型,我们复制对象的地址引用就是这个堆内存的地址;队列就是异步队列,用于event loop的执行。 JS代码在引擎中是以“一段一段”的方式来分析执行的,而并非一行一行来分析执行。而这“一段一段”的可执行代...
初学的时候,上网查资料,得到的结论是变量提升,对于当时的我来说,变量声明提前这个说法更好理解。对此,MDN给出的解释是这是因为在 JavaScript 中执行上下文的工作方式造成的。 🆗,那我们先简单聊聊执行上下文 执行上下文(Execution Context) 执行上下文:英文直译,理解起来有点奇怪,可以简单理解成当前代码的执行环境。 ...
当程序(代码)开始执行时 javscript 引擎创建GobalExecutionContext(全局执行上下文)推入当前的执行栈,此时GobalExecutionContext处于栈顶会立刻执行全局执行上下文 然后遇到one()引擎都会为该函数创建一个新的执行上下文oneFunctionExecutionContext并将其推到当前执行栈的顶端并执行,然后遇到two()twoFunctionExecutionContext入栈...
然后使用this、arguments和函数参数、内部变量、内部函数引用来初始化函数的活动对象(activation object)。作用域链(堆栈)是指向活动对象的指针列表,该函数的活动对象在栈顶,全局变量对象在栈底。 PS:在 JavaScript 的执行中会一直存在一个Execute Context Stack , 最下面一个是Global Context,创建的execution context会...
EC:Execution Context,中文翻译执行上下文,也有翻译成执行环境的。 VO:Variable object,中文翻译变量对象。 这两个概念很重要,涉及到作用域以及作用域链的原理。 执行上下文 EC 先说说Android中的上下文: Android Android 中也有上下文:Context,四大组件都是上下文,还有一个全局的 Application上下文。在 Android 中基本是...
当一个函数被调用时,它会创建一个执行上下文(Execution Context),其中包含一个作用域链。这个作用域链包含了当前执行上下文的变量对象以及所有外层作用域的变量对象。 事件循环(Event Loop): JavaScript是单线程的,但它通过事件循环机制来处理异步操作。 事件循环不断检查调用栈(Call S...
解开这些谜题的关键钥匙是——执行上下文(execution context)。我希望这一系列文章可以为大家理解 JavaScript 提供一个独特的视角,而不是照搬 MDN 中准确但晦涩的定义。 不要误会我的意思。概念的定义是非常重要的,我也经常查阅 MDN 文档。但是,我认为“知其然不如知其所以然”,知道它们是如何实现的比记住定义更关...
闭包是JavaScript(包括其他绝大多数语言)中非常强大的特性,MDN上是这样定义的: 闭包是指那些能够访问自由变量(既不是本地定义也不作为参数的那些变量)的函数。换句话说,这些函数可以“记住”它被创建时候的环境。 我们来看些例子。 Example 1: function numberGenerator() { // 闭包内的局部自由变量 var num = ...
闭包是 JavaScript (以及其他大多数编程语言) 的一个极其强大的属性。正如在MDN (Mozilla Developer Network) 中定义的那样: 闭包是指能够访问自由变量的函数。换句话说,在闭包中定义的函数可以“记忆”它被创建的环境。 注:自由变量是既不是在本地声明又不作为参数传递的一类变量。(译者注:如果一个作用域中使用的...
「The this keyword evaluates to the value of the ThisBinding of the current execution context.」「this 这个关键字代表的值为当前执行上下文的ThisBinding。」然后再来看看MDN 对this 的定义:「In most cases, the value of this is determined by how a function is called.」「在大多数的情况下,this ...