JS中的执行上下文与执行上下文栈

/*
1. 在 JS 引擎执行代码的时候是按着顺序一段一段执行的

2. 什么样的内容可以算做是段呢
  在 JS 中所有的可执行性代码都可以算是做是段 
  在 JS 中三种类型可以称之为段( 函数、全局代码、eval代码 )
  当 JS 引擎执行到这些代码时候就会做一些准备工作,我们将这些准备工作称之为叫 执行上下文

3. 多个执行上下文如何进行管理
  在 JS 执行引擎开始执行代码的时候就会创建一个容器,我们称之为叫 执行上下文栈
  栈区的特点就是具有先进后出的特点
  每当遇到一个段,需要创建一个执行上下文的时候就会在栈区中放入一个执行上下文
  当这个执行上下文中的代码执行完毕之后,就会将它从执行上下文栈中弹出
  执行上下文栈中最底层永远有一个全局的执行上下文,这里的内容只有在程序退出的时候会弹出

*/

// console.log(foo)

// var foo = function() {
// console.log('1111')
// }
// foo() // 111

// var foo = function() {
// console.log('222')
// }
// foo() // 222

// function fn3() {
// console.log(3)
// }

// function fn2() {
// fn3()
// }

// function fn1() {
// fn2()
// }
// 1 调用 fn1 的时候就会在执行上下文栈中压入一个 fn1 的执行上下文,此时发现调用了 fn2
// 2 调用 fn2 的时候又会在执行上下文栈中压入一个 fn2 的执行上下文,此时发现调用了 fn3
// 3 调用 fn3 的时候又直接输入 3 , 然后程序退出执行,将 fn3 的执行上下文弹出
// fn1()

// 函数提升之后栈区中只有第二次的函数执行上下文,因此二次结果都是 test2
function test(){
console.log('test1');
};
test();

function test(){
console.log('test2');
};
test();

posted @ 2020-05-20 22:16  麻团boy  阅读(114)  评论(0编辑  收藏  举报