代码段概念

  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. 栈 - 基本数据类型
1.
2. 堆 - 引用数据类型
1. GO 全局对象
2. VO 变量对象 用来存放当前执行上下文中创建的数据

JS 变量都存储在内存中,而内存给变量开辟了两块存储空间,分别为栈(stack)空间和堆(heap)空间;

栈空间:存放 JS 基本数据类型,通过按值访问,可以直接操作保存在变量中的实际值;

堆空间:存放 JS 引用数据类型,通过对象的引用访问,不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地

址。

ECG 执行上下文

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

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

JS 代码片段 / 预编译/预解析 /执行上下文/ECG/EC/ECS/GO/VO/AO的更多相关文章

  1. 127个常用的JS代码片段,每段代码花30秒就能看懂(上)

    127个常用的JS代码片段,每段代码花30秒就能看懂(上) JavaScript 是目前最流行的编程语言之一,正如大多数人所说:“如果你想学一门编程语言,请学JavaScript.” FreeCode ...

  2. 常用JS代码片段

    1.隐藏部分数字,如手机号码,身份证号码 1 2 3 function (str,start,length,mask_char){ return str.replace(str.substr(star ...

  3. 【学习笔记】深入理解js原型和闭包(11)——执行上下文栈

    继续上文的内容. 执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境.当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境.处于活动状态的执行 ...

  4. js预编译和函数执行

    javascript 执行过程 1.语法检测(有没有基本的语法错误,例如中文,关键字错误...)2.词法分析(预编译) (1)创建全局GO(global object)对象 (2)对var声明的变量进 ...

  5. 还原真实,javascript之预编译 / 预解析

    今天在群里吹水时,有群友提出一个问题.我一看很简单,就立马给出了答案:因为存在变量提升,所以输出undefined.本以为无人反驳,可确招来口诛笔伐.作为写实派的我,一贯以来坚持真实是我的使命,岂能容 ...

  6. PreparedStatement预编译的sql执行对象

    一.预编译,防sql注入 其中,设置参数值占位符索引从1开始:在由sql 连接对象创建 sql执行对象时候传入参数sql语句,在执行对象在执行方法时候就不用再传入sql语句: 数据库索引一般是从1开始 ...

  7. 常用的js代码片段

    1.单选框/手风琴 <script> $(document).ready(function(){ $("dd").on("click",functi ...

  8. Atom编辑器折腾记_(15)JS代码片段补全(插件:javascript-snippets)

    题外话 这款插件就比較重量级了-.用熟悉了写原生JS的效率要提升非常多--并且,不仅支持JS还包括了nodejs snippet javascript-snippets 插件作者: zenorocha ...

  9. 解决js代码中加入alert()就成功执行,不加就不对的问题!

    问题: jquery中的$(document).ready(function(){})中调用两个方法(1)利用ajax请求去后台查图书类别的方法(2)当页面上利用图书类别去查询图书返回页面,让图书类别 ...

  10. 汇总前端最最常用的JS代码片段

    html5选择器 //参数均接收一个合法的css选择器 element = document.querySelector('.foo,.bar');//返回带有foo或者bar样式类的首个元素 ele ...

随机推荐

  1. 【源码】RapidJSON 源码剖析(0.1):调试工具 GDB 的使用

    [源码]RapidJSON 源码剖析(0.1):调试工具 GDB 的使用 正式开始源码阅读之前,有必要了解一下源码阅读中用到的调试工具 GDB. GDB(GNU Debugger) 是一种可以运行在多 ...

  2. 【KAWAKO】MNN-1.2.0版本交叉编译遇到的错误与解决方法

    目录 在使用gcc-linaro-7.5.0-aarch64-linux-gnu.gcc-linaro-6.3.1-aarch64-linux-gnu交叉编译链对MNN1.2.0进行交叉编译的过程中, ...

  3. playwright 实现高亮、is_visible 等源码修改

    一. 前言 高亮是什么? 在ui自动化中可以执行js来让某个页面元素高亮,比如背景颜色.字体颜色.边框颜色等发生改变,以此更加方便执行的时候点了哪一步操作.(如果有不清楚怎么实现的可以转到我的介绍se ...

  4. cmd数字雨原代码

    转自:https://www.xitongtiandi.net/wenzhang/xp/29290.html

  5. pat乙级1016 部分A+B

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> ...

  6. vs2019 代码片段管理

    工具/代码片段管理 上面地址是vs内部代码片段,可以参考写自定义片段 写好的模板保存为.snippet文件,放到固定文件夹中,然后使用添加,直接找到文件夹添加即可 <?xml version=& ...

  7. Linux操作命令(六)1.wc命令 2.grep命令 3.正则表达式

    1.wc 命令是一个统计的工具,主要用来显示文件所包含的行.字和字节数 参数 描述 -c 统计字节数 -l 统计行数 -m 统计字符数,这个标志不能与 -c 标志一起使用 -w 统计字数,一个字被定义 ...

  8. Matplotlib 绘图线

    绘图过程如果我们自定义线的样式,包括线的类型.颜色和大小等. 线的类型 线的类型可以使用 linestyle 参数来定义,简写为 ls. 类型 简写 说明 'solid' (默认) '-' 实线 'd ...

  9. 零基础小白速成python?有了这本书你还在担心什么?

    <Python编程快速上手>书籍PDF高清版免费下载地址 提取码:bc9h 内容简介  · · · · · · 如今,人们面临的大多数任务都可以通过编写计算机软件来完成.Python是一种 ...

  10. 开源 IM 系统 tinode 部署教程| WSL 环境

    背景 我们的需求是在本地部署一套 IM 系统,选择 tinode.为便于后端启动,我们采用 WSL 环境,配合 docker 安装数据库,来启动 IM 应用. 解决 WSL 启动前端和后台服务 cmd ...