<script> //1.总结一句话:执行上下文就是当前JavaScript代码被解析器和执行时存在的环境(抽象的概念) //首先被解析然后被执行 //执行上下文(execution content) //2.执行上下文的类型 //(1)全局执行上下文:这是默认的,最基础执行上下文。不在函数内部的代码都位于全局执行上下文中 // var str = 'aaa'; // function test(){ // //下面这个str2就不在全局执行上下文中 // var str2 = "bbb"; // } // this.str = 'ccc' // console.log(str) // this.str2 = 'ddd' // console.log(str2) //创建一个全局对象,其实就是我们的window对象 //将this指针指向这个全局对象 //(2)函数执行上下文:每次函数被调用的时候,就会创建一个新的执行上下文 //每个函数都有自己的执行上下文 //一个程序中可以存在任意数量的函数执行上下文 //每一个函数执行上下文被创建,它都会按照特定的顺序执行一系列的步骤 // (3)eval函数执行上下文:运行在函数中的代码也获得了自己的执行上下文 //3.执行上下文的生命周期 // 总的来说:创建阶段-执行阶段-回收阶段 // 1.创建阶段:当函数被调用但是未执行内部的任何代码之前,会做以下几件事: // 1.1创建变量对象: // 首先会初始化函数的参数arguments,提升函数声明和变量声明 // 1.2创建作用域链:在执行上下文创建阶段,作用域链是在变量对象之后创建的,作用域链本身包含变量对象。作用域链用来解析变量。 // 1.3确定this指向:很多种情况。 // 2.执行阶段: // 2.1执行变量赋值、代码执行。 // 3.回收阶段 // 3.1执行上下文出栈,等待虚拟机回收 // 4.变量声明提升 // 5.函数声明提升 //变量声明提升 // console.log(a) // var a=10; // console.log(a) //函数变量提升 //函数声明方式: //函数 // var str = 'aaa'; // function test(name){ // //下面这个str2就不在全局执行上下文中 // var str2 = "bbb"; // this.name = name // console.log(name) // } // this.test('zhang')//这里的this指向全局 console.log(f1) function f1(){} console.log(f2) var f2 = function (){} //注意:当遇到函数和变量同名且都会被提升的情况,函数声明声明优先级比较高,因此变量声明会被函数声明覆盖 </script>
js执行上下文笔记
最新推荐文章于 2024-07-19 15:13:24 发布