调用栈
是解析器的一种机制
当脚本要调用一个函数时,解析器把该函数添加到栈中并且执行这个函数。任何被这个函数调用的函数会进一步添加到调用栈中,并且运行到它们被上个程序调用的位置。当函数运行结束后,解释器将它从堆栈中取出,并在主代码列表中继续执行代码。如果栈占用的空间比分配给它的空间还大,那么则会导致“栈溢出”错误。原文地址:https://developer.mozilla.org…
JavaScript 是单线程语言,也就是说它只有一个调用栈。
调用栈记录程序运行情况。调用函数会在栈的顶部,返回函数会弹出栈。
栈溢出:超过栈的最大空间
执行上下文
有三种
全局执行上下文(1、都有一个全局对象,在浏览器中一般为 window。2、此时,this 会指向全局对象,浏览器中一般为 window)
函数执行上下文(每个函数创建都会有一个新的执行上下文)
在非严格模式下,this 指向全局对象。
在严格模式下,this 将保持他进入执行上下文时的值
Eval()执行上下文(不常用,不讨论)
变量提升
“提升”至顶部,实际上是,变量和函数声明在编译时放进了内存。仅仅是声明被提升。原因是:执行上下文的方式
总结
JS 解析器开始执行:
创建一个执行上下文栈
执行全局的执行上下文,并放入执行上下文栈中
调用函数时,创建函数执行上下文栈,放入函数,执行完弹出。
保证单线程。
执行上下文创建分成两个阶段:
创建阶段: 将所有的变量, 函数声明以及函数参数 组成一个活动对象
执行阶段: 解释代码.
原文地址:https://www.cnblogs.com/lin-j…