调用栈

是解析器的一种机制

当脚本要调用一个函数时,解析器把该函数添加到栈中并且执行这个函数。
任何被这个函数调用的函数会进一步添加到调用栈中,并且运行到它们被上个程序调用的位置。
当函数运行结束后,解释器将它从堆栈中取出,并在主代码列表中继续执行代码。
如果栈占用的空间比分配给它的空间还大,那么则会导致“栈溢出”错误。
原文地址:https://developer.mozilla.org...
  • JavaScript是单线程语言,也就是说它只有一个调用栈。

  • 调用栈记录程序运行情况。调用函数会在栈的顶部,返回函数会弹出栈。
  • 栈溢出: 超过栈的最大空间

执行上下文

有三种

  • 全局执行上下文(1、都有一个全局对象,在浏览器中一般为window。2、此时,this会指向全局对象,浏览器中一般为window)
  • 函数执行上下文(每个函数创建都会有一个新的执行上下文)

       在非严格模式下,this指向全局对象。
       在严格模式下,this将保持他进入执行上下文时的值
    
  • Eval()执行上下文(不常用,不讨论)

变量提升

“提升”至顶部,实际上是,变量和函数声明在编译时放进了内存。
仅仅是声明被提升。
原因是:执行上下文的方式

总结

JS解析器开始执行:

  1. 创建一个执行上下文栈

  2. 执行全局的执行上下文,并放入执行上下文栈中
  3. 调用函数时,创建函数执行上下文栈,放入函数,执行完弹出。

保证单线程。

执行上下文创建分成两个阶段:

创建阶段: 将所有的变量,函数声明以及函数参数 组成一个活动对象
执行阶段: 解释代码.

原文地址:https://www.cnblogs.com/lin-j...


winna
0 声望0 粉丝

认真生活。