首页 > 其他分享 >JS 代码片段 / 预编译/预解析 /执行上下文/ECG/EC/ECS/GO/VO/AO

JS 代码片段 / 预编译/预解析 /执行上下文/ECG/EC/ECS/GO/VO/AO

时间:2023-02-27 18:55:36浏览次数:40  
标签:ECG 函数 代码段 JS EC GO 上下文 提升

代码段概念

  1. 一个script就是一个代码段
  2. 在一个页面中可以有多个代码段
  3. 每一个代码段, 彼此独立的, 如果上面的代码段报错了,不会影响下一个代码段
  4. referenceError 引用错误
  5. 下面代码段中定义的数据,在下面的代码段中可以使用

预编译/预解析

  1. 预解析期间做了什么
    1. 声明提升 ,var 定义的变量 提升的仅仅是声明,没有赋值,强行调用,返回undefined;function声明的函数整体要提升, 提升到代码段的最前面
    2. 如果是函数内部的局部变量, 就提升到函数内部的最前面
    3. var定义的变量仅仅是提升, 函数提升不仅是声明,还有赋值
    4. 函数表达式 本质是一个变量
      fun();//这里会报错, 函数表达式提升 只声明没赋值, 这里fun的值是undefined  
      var fun = function(){console.log('fun...')}
      
    5. 函数也会提升,如果提升变量名和函数名一样,只会存在一个名字,所以函数提升后 同名变量的值就会变成函数
          console.log(v);
          var v = 123;
          function v(){}
          console.log(v);
      
      // 输出
      // function v(){}
      // 123
      
    6. 函数内部没有定义的的变量,是全局变量
          function fn(){
              a = 100  //a在函数内部没有定义  就是全局变量
          }
          fn()
          console.log(a) //110
      

数据存储

1. 栈-基本数据类型 
2. 堆- 引用数据类型

JS变量都存储在内存中,而内存给变量开辟了两块存储空间,分别为栈(stack)空间和堆(heap)空间;
栈空间:存放JS基本数据类型,通过按值访问,可以直接操作保存在变量中的实际值;
堆空间:存放JS引用数据类型,通过对象的引用访问,不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地
址。

ECG 执行上下文

1. 全局代码执行时就会产生全局的执行上下文, execution context globle 
2. 每当调用函数就产生一个局部的执行上下文EC
3. 执行上下文产生时, 都需要放到一个栈中, 这个就是执行上下文栈 execution context stack
4. 函数调用完毕,函数的EC就要出栈,当ECG执行完毕时, ECG也要出栈 
5. 出入栈 遵循 先进后出  也就是ECG先进  最后出来
6. 代码的数据都是在上下文EC中去找

堆 GO

1. js在代码执行时, 会在堆中创建一个全局对象,Globle Object  GO
2. 在浏览器中 这个GO就是window
3. GO是一个window , window是一个全局对象,对象是属性的无序集合
4. 声明的全局变量 和 在全局代码中写的函数都挂载在GO上

16774738991178

标签:ECG,函数,代码段,JS,EC,GO,上下文,提升
From: https://www.cnblogs.com/whokillbill/p/js-dai-ma-pian-duan--yu-bian-yiyu-jie-xi-zhi-xing.ht

相关文章

  • php laravel 宝塔 访问报错 Warning: require(): open_basedir restriction in effect
    错误信息Warning:require():open_basedirrestrictionineffect.File(/www/wwwroot/nxcrm/vendor/autoload.php)isnotwithintheallowedpath(s):(/www/wwwroot/......
  • 去中心化金融-Lec3
    区块链(什么是区块链?)区块链提供了一种无需可信的参与方,能够让多个参与方实现合作的方式(若存在可信的第三方,则不需要区块链;但是金融系统中往往没有可信的第三方)终端用户工......
  • JS 判断数组对象中某个字段有无重复
    判断一个数组中对象中,某个字段是否有重复1.使用setmap实现letarr=[{name:'zhang',id:'1001'},{nmae:'li',id:'1001'}]//判断id是否重复//返回一个id......
  • FastJson参数
    名称含义备注QuoteFieldNames输出key时是否使用双引号,默认为true UseSingleQuotes使用单引号而不是双引号,默认为false WriteMapN......
  • centos7中 /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
     001、安装strcuture遇到如下问题:[root@PC1console]#./structure-bash:./structure:/lib/ld-linux.so.2:badELFinterpreter:Nosuchfileordirectory ......
  • 【Python】 basemap 报错‘module‘ object is not callable
    报错:Traceback(mostrecentcalllast):File"/Users/ddd/Desktop/map_01.py",line5,in<module>m=Basemap()#使用Basemap()创建一个地图File"/Users/ddd......
  • JSP环境搭建及入门 和 虚拟路径和虚拟主机
    Jsp:是一个动态网页,而不是静态网页html,css,js,Jquery:是静态网页动态网页是随着,时间,地点,用户操作,而改变静态不需要jsp动态是需要的 BS可以通过浏览器直接访问......
  • python序列化 json和pickle
    #1、什么是序列化#序列化指的是把内存的数据类型转成一个特定格式的内容#该格式的内容可用于存储或者传输给其它平台使用#内存中的数据类型---》序列化----》特定......
  • json-bigint处理前端long丢失精度问题
    通过ajax请求回来的数据在response和preview两种状态显示的id是不同的。      原因:response中的看到的数据格式其实是字符串(ajax请求回来的数据本质上是字......
  • 使用 nvm 管理 node.js 版本
    使用nvm管理node.js版本摘自:https://www.jianshu.com/p/89a4adf76c86简介在实际的前端开发过程中,可能会经常遇见node.js的版本问题,不同的项目需要使用不同的node......