首页 > 其他分享 >字节前端--深入JS

字节前端--深入JS

时间:2023-04-27 18:14:42浏览次数:35  
标签:outer 函数 name -- JavaScript JS inner 执行 字节

深入JS

首先先介绍JS的基本概念:

比如是单线程,动态,弱类型等等。

除了这些东西之外还有:

下面的一些基础概念:

  1. JavaScript 是一种脚本语言,通常在网页上运行。
  2. JavaScript 不需要编译,因为它是一种解释性语言。
  3. 在网页上添加 JavaScript 的方式有多种,包括内联脚本、嵌入式脚本和外部脚本。
  4. 变量是 JavaScript 中的基本组件,用于存储数据,并且可以在程序中被修改和调用。
  5. JavaScript 支持许多数据类型,包括字符串、数字、布尔值、对象和数组等等。
  6. 函数是 JavaScript 程序的基本构建块,用于执行特定的任务或功能。
  7. 控制结构包括 if 语句、while 循环、switch 语句等等,用于控制程序的流程。
  8. 对象是 JavaScript 中的另一个重要概念,它由属性和方法组成。
  9. 在浏览器端,JavaScript 通常是通过文档对象模型(DOM)来操作网页内容的。
  10. Ajax 技术可以让 JavaScript 应用实现异步加载和处理请求的功能。

接下来我们看JS是如何进行执行的:

  1. 首先,浏览器解析 HTML 和 CSS 文件,并把 JavaScript 代码解释为可执行的指令。
  2. 当浏览器遇到 JavaScript 代码时,会创建一个 JavaScript 引擎的实例,比如 Google Chrome 使用 V8 引擎。
  3. JavaScript 代码是按照书写顺序依次执行的,除非使用了异步处理方法,比如 setTimeout() 函数。
  4. 在执行 JavaScript 代码时,浏览器会创建一个称为执行上下文(execution context)的环境,用于存储变量、函数和对象等信息。每个执行上下文都有一个变量对象(variable object)来存储变量和函数。
  5. JavaScript 引擎会执行 JavaScript 代码中的语句(statement),并在需要时创建新的执行上下文。
  6. 当引擎遇到函数调用,它会创建一个新的执行上下文,并把它压入执行上下文栈(ECStack)中。
  7. 执行上下文栈是一种后进先出(LIFO)的数据结构,用于跟踪执行上下文之间的关系。当函数执行完毕时,引擎会从栈中弹出该执行上下文。
  8. 在执行 JavaScript 代码时,如果发生错误,引擎会抛出异常(exception)。这可能会导致代码停止执行或跳转到错误处理程序。
  9. 在执行 JavaScript 代码时,浏览器还会使用回调函数(callback function)和事件监听器(event listener)等特殊机制来处理用户交互、网络请求等外部事件。

image.png

接着是JS的一些进阶的知识点:

第一个是闭包:

举个实例会更好理解:

function outer() 
{ var name = "binjie09"; function inner() 
{ console.log(name); } 
return inner; // 返回内部函数 inner }
var func = outer(); // 执行外部函数 outer,并把返回的内部函数保存到变量 func 中 func(); 
// 输出 "binjie09"
复制代码

在这个例子中,函数 outer 内部定义了一个变量 name 和一个内部函数 inner。然后将内部函数 inner 作为返回值返回,而不是直接执行它。

在执行 var func = outer(); 时,函数 outer 被调用,此时变量 name 获得了值 "binjie09",并且函数 inner 还没有被执行。然后将内部函数 inner 赋值给变量 func

在执行 func() 时,由于 func 保存了内部函数 inner,所以可以通过调用 func 来执行 inner 函数,并输出变量 name 的值 "binjie09"。而在这个过程中,由于内部函数 inner 能够访问外部函数 outer 中的变量 name,因此形成了一个闭包。

在这个例子中,由于闭包的存在,即使函数 outer 执行完毕并弹出了调用栈,变量 name 的值仍然被保存在内存中,可以被下一次调用函数 inner 时使用。

第二个是this指针:

跟c++的this指针有异曲同工之妙,就是this指针可以指向临时变量。

第三个是垃圾回收:

举个实例:

var obj = { name: "binjie09", age: 20 }; // 将这个对象赋值给另一个变量 
var obj2 = obj; // 将 obj 设置为 null,解除对原对象的引用 
obj = null; // 现在只有 obj2 仍然引用着原对象 
console.log(obj2); // 输出 
{ name: "binjie09", age: 20 } // 再次将 obj2 指向另一个对象 
obj2 = { name: "Tom", age: 22 }; // 原对象已经没有任何引用,成为了垃圾,将被垃圾回收器回收

标签:outer,函数,name,--,JavaScript,JS,inner,执行,字节
From: https://www.cnblogs.com/iolzyy/p/17359860.html

相关文章

  • Xcode 14 m1 系统 遇见的坑
    我是查看环信demo遇到了记下来1、是运行摸机器一直报错xxx.o文件找不到  forarchitecturearm64 podfile文件post_installdo|installer|installer.generated_projects.eachdo|project|project.targets.eachdo|target|target.build_c......
  • 线段树的动态开点模板
    学习自数据结构学习笔记(5)动态开点线段树动态开点线段树感谢大佬们博客的帮助//AConemoretimes#include<bits/stdc++.h>usingnamespacestd;#definefifirst#definesesecond#definepbpush_back#defineendl'\n'#defineall(x)(x).begin(),(x).end()......
  • MySQL
    1、回表查询与索引覆盖聚簇索引:主键索引一般是聚簇索引。聚簇索引的非叶子结点记录的是索引,叶子结点记录了对应的数据行(所有的字段)。非聚簇索引:叶子结点记录的是普通索引列与主键的对应关系(不记录别的字段)。如果走了普通索引,但想要select走的索引之外的字段,那么在根据非聚簇......
  • MySQL----日期相关
    获取当前日期selectcurdate();结果: 2023-04-27获取当前日期为几号selectday(curdate())结果:27在当前日期上加上时间间隔selectDATE_ADD(curdate(),interval2day)结果:2023-04-29一、获取本月第一天selectDATE_ADD(curdate(),interval-day(curdate())+1day)--获取本......
  • Python-集合的基本操作(set)
    1. 前言python中的集合和数学里的类似也是用于存放不重复的元素,它有可变集合(set)和不可变集合(feozenset)两种,集合的所有元素都放在一对大括号"{}"里(列表是[]、元组是()、字典是{}),集合最好的应用就是去重,因为集合中的每一个元素都是唯一的。 2. 集合的创建2.1.直接使用"{}"创......
  • 4.4 网际协议:因特网中的转发和编址
    一、IPv4数据报格式 1.版本号:4bit 2.首部长度:4bit,用于确定IP数据报中载荷实际开始的地方。一般IP数据报首部长度为20字节。 3.服务类型 4.数据报长度:16bit,IP数据报的总长度(首部+数据),单位为字节。 5.16比特标识,3比特标志,13比特片偏移:与分片有关 6.寿命:每过一台......
  • PHP8编译安装报错make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1
    make:***[ext/fileinfo/libmagic/apprentice.lo]错误1 解决:当配置PHP时出现make:***[ext/fileinfo/libmagic/apprentice.lo]Error1时是因为服务器内存不足1G只需要在配置命令中添加--disable-fileinfo即可......
  • CSS3弹性盒子用于子元素填充父元素
    主要记住三个关键点父元素display设置为flex,表明该容器是弹性盒子,设置flex-flow指明弹性方向,子元素设置flex属性,指定弹性比例 CSS3弹性盒子|菜鸟教程(runoob.com)......
  • 什么是好的 API 文档?
    接口文档是描述如何与软件系统中的特定接口进行交互的文档,通常包含接口的名称、描述、请求和响应的格式、参数、返回值、错误码、调用示例等信息。它是开发人员在设计和开发软件系统时必不可少的参考资料。日常工作中,运用接口文档最多的是前后端的同学,因为要遵守各自的规范流程,所......
  • Golang每日一库之bcrypt
    本文官方文档:https://pkg.go.dev/golang.org/x/crypto/bcrypt前言之前讲过JWTTokenhttps://www.cnblogs.com/zichliang/p/17303759.htmlJWT呢是信息是经过数字签名的,因此可以被验证和信任。然后今天就来说说密码学,我们在做鉴权做用户处理时会把密码存储到数据库中,但是......