{"componentChunkName":"component---src-templates-blog-post-js","path":"/learn-browser/exe/","result":{"data":{"markdownRemark":{"html":"<h3>js 代码是怎么执行的（先编译，再执行）</h3>\n<ul>\n<li>JavaScript 代码执行过程中，需要先做变量提升，而之所以需要实现变量提升，是因为 JavaScript 代码在执行之前需要先编译。在编译阶段，变量和函数会被存放到变量环境中，变量的默认值会被设置为 undefined；</li>\n<li>在代码执行阶段，JavaScript 引擎会从变量环境中去查找自定义的变量和函数。如果在编译阶段，存在两个相同的函数，那么最终存放在变量环境中的是最后定义的那个，这是因为后定义的会覆盖掉之前定义的。以上就是今天所讲的主要内容，</li>\n<li></li>\n</ul>\n<p>当然，学习这些内容并不是让你掌握一些 JavaScript 小技巧，其主要目的是让你清楚 JavaScript 的执行机制：先编译，再执行。</p>\n<h3>执行栈？</h3>\n<ul>\n<li>每调用一个函数，JavaScript 引擎会为其创建执行上下文，并把该执行上下文压入调用栈，然后 JavaScript 引擎开始执行函数代码。</li>\n<li>如果在一个函数 A 中调用了另外一个函数 B，那么 JavaScript 引擎会为 B 函数创建执行上下文，并将 B 函数的执行上下文压入栈顶。</li>\n<li>当前函数执行完毕后，JavaScript 引擎会将该函数的执行上下文弹出栈。</li>\n<li>当分配的调用栈空间被占满时，会引发“堆栈溢出”问题。</li>\n</ul>","timeToRead":1,"frontmatter":{"title":"","date":null,"spoiler":null},"fields":{"slug":"/learn-browser/exe/"}}},"pageContext":{"slug":"/learn-browser/exe/","previous":null,"next":{"fields":{"slug":"/learn-browser/gc/"},"frontmatter":{"title":""}}}},"staticQueryHashes":["3649515864","63159454"]}