当前位置: 首页 > news >正文

网络安全知识点整理(作业2)

目录

一、js函数声明->function

第一种

第二种

第三种

 二、this关键字

this使用场合

1.全局环境

2.构造函数

3.对象的方法

避免多层this

三、js的同步与异步

定时器

setTimeout和setInterval

同步与异步的例子

四、宏任务与微任务

分辨宏任务与微任务


一、js函数声明->function

一共有三种方式

第一种

function命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。

function print(a) {console.log(a);
}

上面的代码命名了一个print函数,以后使用print()这种形式,就可以调用相应的代码。

第二种

除了用function命令声明函数,还可以采用变量赋值的写法。这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式,因为赋值语句的等号右侧只能放表达式。

var print = function(s) {console.log(s);
};

第三种

 Function构造函数。下面构造的两个函数是一样的,只是方式不一样。Function构造函数接受三个参数,除了最后一个参数是add函数的“函数体”,其他参数都是add函数的参数。Function构造函数可以不使用new命令,返回结果完全一样。

var add = new Function('x','y','return x + y'
);function add(x, y) {return x + y;
}

 二、this关键字

this关键字是一个非常重要的语法点。this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。 不管是什么场合this都有一个共同点:它总是返回一个对象

下面代码中,this.name表示name属性所在的那个对象。由于this.name是在describe方法中调用,而describe方法所在的当前对象是person,因此this指向personthis.name就是person.name

var person = {name: '张三',describe: function () {return '姓名:'+ this.name;}
};person.describe()   // "姓名:张三"

this使用场合

1.全局环境

全局环境使用this,它指的就是顶层对象window(全局变量)

不管是不是在函数内部,只要是在全局环境下运行,this就是指顶层对象window

this === window // truefunction f() {console.log(this === window);
}
f() // true

2.构造函数

构造函数中的this,指的是实例对象。

这里定义了一个构造函数Obj。由于this指向实例对象,所以在构造函数内部定义this.p,就相当于定义实例对象有一个p属性。

var Obj = function (p) {this.p = p;
};

3.对象的方法

如果对象的方法里面包含thisthis的指向就是方法运行时所在的对象。该方法赋值给另一个对象,就会改变this的指向。但是,这条规则很不容易把握。请看下面的代码。obj.foo方法执行时,它内部的this指向obj

var obj ={foo: function () {console.log(this);}
};obj.foo() // obj

避免多层this

 由于this的指向是不确定的,所以切勿在函数中包含多层的this。这里代码包含两层this,结果运行后,第一层指向对象o,第二层指向全局对象,因为实际执行的是下面的代码。

var o = {f1: function () {console.log(this);     // Objectvar f2 = function () {console.log(this);   // Window}();}
}o.f1()

下面代码定义了变量that,固定指向外层的this,然后在内层使用that,就不会发生this指向的改变。事实上,使用一个变量固定this的值,然后内层函数调用这个变量,是非常常见的做法,请务必掌握。JavaScript 提供了严格模式,也可以硬性避免这种问题。严格模式下,如果函数内部的this指向顶层对象,就会报错。

var o = {f1: function() {console.log(this);var that = this;var f2 = function() {console.log(that);}();}
}o.f1()
// Object
// Object

三、js的同步与异步

js是一个单线程的语言,学过java、c之类的都知道,其他语言有个叫类继承的东西,就相当于开辟另个一个流水线,是多线程

​ 而javascript就像一条流水线,它无法开辟别的流水线,是一个单线程,也就是说js要么加工,要么包装,不能同时进行多个任务和流程

定时器

JavaScript 提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()setInterval()这两个函数来完成。它们向任务队列添加定时任务。

在js中,最基础的异步就是setTimeout和setInterval这两个函数,但是很少人知道这两个人其实是异步,简单介绍一下吧

setTimeout和setInterval

function void(){};
setTimeout(void,1000);//隔1000毫秒后执行一次void,然后就不会在执行了
setInterval(void,1000);//每隔1000毫秒(1秒)执行一次void

同步与异步的例子

用官方一点的话来讲,当一个js被执行的时候,把同步代码全放到一个执行栈里面,异步代码放到一个任务队列中,当栈执行完毕后开始执行任务队列

<script>function add(){console.log(2)}function add3(){console.log(5)}function add2(){console.log(4)}console.log(1)setTimeout(add,5000);console.log(3)setInterval(add2,1000)setTimeout(add3,1000)</script>

 ​首先,同步的代码是console.log(1)和log(3),所以先输出了1,3,然后就是异步的地方了。

 异步三个代码,setTimeout、setInterval、setTimeout,当我们执行完同步代码(也就是输出1,3)开始执行异步代码对于第一个异步操作,因为我们设置的延迟时间为5秒(这个地方,虽然没有显示出来,但是这个异步操作已经开始执行,也就是说当代码执行到这一步的时候计时就已经开始),然后就是setInterval(add2,1000)也就是4,5,4,4,4,然后此时,设置的第一个延迟5秒到了,就输出一个2。

​同步的入栈顺序是log(1),log(3),然后出栈就是1,3,输出也就是1,3

异步的入队顺序是,add,add2,add3,出来的时候也是add,add2,add3,但由于add的延迟原因,所以add2先输出

所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行

四、宏任务与微任务

宏任务:普通任务,正常执行。正常的异步任务都是宏任务,最常见的就是定时器(setInterval, setImmediate, setTimeout)、IO任务

微任务:优先于宏任务执行(但不会抢断)。微任务出现比较晚,queueMicrotask、ES6、Promise和async属于微任务(当然,async就是promise)

​ 我们可以看出来,微任务的优先级比宏任务高,一个任务结束后,事件循环会找到并执行全部微任务,然后再查找其他任务,那么,怎么分别宏任务和微任务呢?

分辨宏任务与微任务

<script>console.log('aaa');setTimeout(() => console.log(111), 0); //异步任务queueMicrotask(() => console.log(222)); //异步任务console.log('bbb');</script>

setTimeout(() => console.log(111), 0);这里的()=>就类似于定义一个函数然后调用

输出的结果是

aaa

bbb

222

111

执行顺序就像我们之前说的,先执行同步的,也就是aaa,bbb,然后在执行异步的,但是这里,setTimeout在queueMicrotask前面,却还是先执行了queueMicrotask,就是因为queueMicrotask是微任务,而setTimeout是宏任务,也就是说在异步中,会先完成所有的微任务,然后再去执行宏任务
 

这里 每个代码的影响不一样,重要性也不一样,按照官方的设想就是,任务之间的不平等,有些任务对于用户而言更加重要,需要先执行,有些任务(类似定时器)晚点执行也没有什么问题

相关文章:

网络安全知识点整理(作业2)

目录 一、js函数声明->function 第一种 第二种 第三种 二、this关键字 this使用场合 1.全局环境 2.构造函数 3.对象的方法 避免多层this 三、js的同步与异步 定时器 setTimeout和setInterval 同步与异步的例子 四、宏任务与微任务 分辨宏任务与微任务 一、js…...

idea数据库快速上手-库操作与表结构和数据操作

引言 对数据库的操作无非就是执行SQL语句&#xff0c;要想熟练操作数据库&#xff0c;就要熟练运用SQL语句。 一&#xff0c;数据库操作 展示当前服务器内的数据库 -- 展示服务器内的数据库 show databases; show schemas; 执行结果&#xff1a; 创建数据库&#xff1a; --…...

当“国潮”遇见“双语” 以传承之心种下一颗文化的种子

看&#xff0c;活灵活现的纸片人在“跳舞”。光影的辉映下&#xff0c;两个形神兼备的“齐天大圣”究竟孰真孰假&#xff1f;舞台上&#xff0c;京西皮影非遗传承人王熙和5岁的Mona小朋友正在用双语为大家带来一段“真假美猴王”的好戏。生动的皮影造型和精彩的故事演绎看得台下…...

计划管理与项目管理:有何区别?

简而言之&#xff0c;是的。尽管它们经常互换使用并对全局产生影响&#xff0c;但它们是完全不同的。 在本文中&#xff0c;我们将了解计划和项目管理之间的差异&#xff0c;提供每个示例&#xff0c;并向您展示如何使计划和项目管理工作更有效地实现您的业务目标。 计划管理与…...

个人信息保护合规审计如何做?

8月3日&#xff0c;为指导、规范个人信息保护合规审计活动&#xff0c;根据《中华人民共和国个人信息保护法》等法律法规&#xff0c;国家互联网信息办公室就《个人信息保护合规审计管理办法&#xff08;征求意见稿&#xff09;》&#xff08;简称《办法》&#xff09;及配套的…...

HTTP杂谈之Referer和Origin请求头再探

一 关于Referer和Origin的汇总 1) 知识是凌乱的,各位看官看个热闹即可2) 内容不断更新1、理解有盲区,需要及时纠正2、内容交叉有重复,需要适当删减3、扩展视野3) 以下内容都与Referer和Origin请求头有关联 nginx防盗链 HTTP杂谈之Referrer-Policy响应头 iframe标签referre…...

数学建模-爬虫入门

Python快速入门 简单易懂Python入门 爬虫流程 获取网页内容&#xff1a;HTTP请求解析网页内容&#xff1a;Requst库、HTML结果、Beautiful Soup库储存和分析数据 什么是HTTP请求和响应 如何用Python Requests发送请求 下载pip macos系统下载&#xff1a;pip3 install req…...

HSRM各表

文章目录 表规则接口种类服务与网关路由菜单一、采购申请1、采购申请—查询2、采购申请-操作记录二、采购申请跟踪报表1、采购申请跟踪报表—列表查询三、寻源1、寻源大厅—列表查询2、寻源大厅—询价单明细3、寻源大厅—物料明细4、寻源大厅—供应商列表5、寻源模板—列表查询…...

Ansible自动化运维工具 —— Playbook 剧本

playbooks 本身由以下各部分组成 &#xff08;1&#xff09;Tasks&#xff1a;任务&#xff0c;即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 &#xff08;2&#xff09;Variables&#xff1a;变量 &#xff08;3&#xff09;Templates&#xff1a;模…...

第二章:多态

系列文章目录 文章目录 系列文章目录前言多态的概念概念 多态的定义及实现多态的构成条件虚函数虚函数的重写C11 override 和 final重载、覆盖(重写)、隐藏(重定义)的对比 抽象类概念接口继承和实现继承 多态的原理虚函数表多态的原理动态绑定与静态绑定 单继承和多继承关系的虚…...

C++面向对象设计基础

一般类、&、const、模板、友元函数、操作符重载基本用法及实现 complex.h #ifndef COMPLEX_H #define COMPLEX_H #include<ostream> using namespace std;template<typename T> class Complex{public:Complex():re(0),img(0){}// 为什么构造函数不能传引用&a…...

Linux定时运行sh脚本,如果sh文件已经在运行,则忽略本次运行

需求来源 我需要linux的crontab定期每10分钟运行lan.sh脚本。但由于lan.sh运行需要较长时间&#xff0c;有时超过10分钟。这样会导致系统多次运行lan.sh脚本&#xff0c;引发运行堆积&#xff0c;导致一些非必要的错误。 解决方法 解决方法是写一个脚本&#xff0c;如果lan.…...

SpringBoot项目中的web安全防护

最近这个月公司对项目进行了几次安全性扫描&#xff0c;然后扫描出来了一些安全漏洞&#xff0c;所以最近也一直在修复各种安全漏洞&#xff0c;还有就是最近在备考软考高级系统架构设计师&#xff0c;也刚好复习到了网络安全这一个章节&#xff0c;顺便将最近修复的安全漏洞总…...

stm32和python串口数据收发

1-1 串口发送端&#xff08;stm32&#xff09; 1字符串发送 void USART_SendData(USART_TypeDef* USARTx, uint16_t Data) {/* Check the parameters */assert_param(IS_USART_ALL_PERIPH(USARTx));assert_param(IS_USART_DATA(Data)); /* Transmit Data */USARTx->DR (D…...

无涯教程-jQuery - Dropable移动函数

Drop-able 功能可与JqueryUI中的交互一起使用。此功能可在任何DOM元素上启用可放置功能。 Drop able - 语法 $( "#droppable" ).droppable(); Drop able - 示例 以下是一个简单的示例&#xff0c;显示了drop-able的用法- <html><head><title>…...

【Python】Web学习笔记_flask(4)——钩子函数

钩子函数可以用来注册在请求处理的不同阶段执行出 Flask的请求钩子指的是在执行视图函数前后执行的一些函数&#xff0c; 之前是有4种&#xff0c;但是 before_first_request已经被删除了&#xff0c;使用时会报错 before_request&#xff1a;在每次请求前执行&#xff0c;…...

JavaScript 原型链解析,宏任务和微任务

目录 什么是原型链&#xff1f; 原型与构造函数 原型链的工作原理 实例&#xff1a;理解原型链 宏任务&#xff08;Macro Task&#xff09; 微任务&#xff08;Micro Task&#xff09; 什么是原型链&#xff1f; JavaScript 是一门基于原型的语言&#xff0c;而原型链是…...

05|Oracle学习(UNIQUE约束)

1. UNIQUE约束介绍 也叫&#xff1a;唯一键约束&#xff0c;用于限定数据表中字段值的唯一性。 1.1 UNIQUE和primary key区别&#xff1a; 主键/联合主键每张表中只有一个。UNIQUE约束可以在一张表中&#xff0c;多个字段中存在。例如&#xff1a;学生的电话、身份证号都是…...

glide加载content://com.android.contacts图片源码粗略梳理

获取链路是这样的&#xff1b; UriLoader类里定义了协议头&#xff1a; 里面有个内部类StreamFactory&#xff1a; 通过StreamLocalUriFetcher类的loadResource方法获取InputStream然后把流转换成为图片&#xff1b; 在这里作个草稿笔记给自己看...

【机器学习】Feature Engineering and Polynomial Regression

Feature Engineering and Polynomial Regression 1. 多项式特征2. 选择特征3. 缩放特征4. 复杂函数附录 首先&#xff0c;导入所需的库&#xff1a; import numpy as np import matplotlib.pyplot as plt from lab_utils_multi import zscore_normalize_features, run_gradien…...

HideMockLocation终极指南:5步快速隐藏Android模拟位置设置

HideMockLocation终极指南&#xff1a;5步快速隐藏Android模拟位置设置 【免费下载链接】HideMockLocation Xposed module to hide the mock location setting. 项目地址: https://gitcode.com/gh_mirrors/hi/HideMockLocation HideMockLocation是一款专为Android开发者…...

国民技术N32G455VE开发实战:JLink_V644g添加芯片全流程(附资源包)

国民技术N32G455VE开发实战&#xff1a;JLink_V644g环境下的芯片支持全流程解析 在嵌入式开发领域&#xff0c;快速搭建开发环境并实现芯片的调试支持是项目推进的关键第一步。对于采用国民技术N32G455VE这款高性能MCU的开发者来说&#xff0c;如何在JLink_V644g调试器中添加对…...

【数据治理实践】第 20 期:数据治理的价值实现——从“成本中心”走向“价值中心”

专栏回顾&#xff1a;从第1期的认知觉醒到第19期的技术前瞻&#xff0c;我们用整整二十期的篇幅&#xff0c;系统构建了数据治理的完整知识体系。这是一段从“认知”到“实践”、从“碎片”到“体系”、从“成本”到“价值”的完整旅程。作为本专栏的收官之作&#xff0c;我将带…...

FRED应用:LED手电筒模拟

对于大多数应用&#xff0c;发光二极管&#xff0c;或者LED&#xff0c;近几年已经超越了白炽灯光源。LED的优势包括体积小巧、发光效率高和使用寿命长。LED也有光学工程师必须处理的不良特性&#xff0c;比如混色和准直的需要。在这个例子中&#xff0c;我们来看一个LED手电筒…...

阿里云国际版防火墙规则:从安全组配置到流量过滤的深度实操

在云计算的生产环境中&#xff0c;“防火墙规则”是保障业务安全的第一道、也是最关键的一道防线。很多开发者在阿里云国际版&#xff08;Alibaba Cloud International&#xff09;开通实例后&#xff0c;常会遇到“SSH连不上”、“Web页面打不开”或者“数据库连接超时”等问题…...

别再对着AD7705手册发愁了!手把手教你用STM32CubeMX配置SPI驱动(附完整代码)

STM32CubeMX实战&#xff1a;5分钟搞定AD7705高精度ADC驱动开发 在嵌入式系统开发中&#xff0c;ADC模块的选择和驱动开发往往是硬件工程师的痛点。AD7705作为一款16位Σ-Δ型ADC芯片&#xff0c;以其高精度和低噪声特性在工业测量领域广受欢迎。但传统的手动寄存器配置方式不仅…...

Python数据科学实战:list、numpy与torch.tensor高效互转指南

1. 为什么需要掌握数据结构互转技巧 在数据科学和机器学习项目中&#xff0c;数据格式的混乱往往是bug的主要来源之一。我遇到过太多这样的情况&#xff1a;模型训练时突然报错&#xff0c;排查半天发现是输入数据的格式不对&#xff1b;或者在不同库之间传递数据时&#xff0c…...

嵌入式设备电池电量精准检测:从ADC采样误差到动态校准实践

1. 嵌入式设备电量检测的痛点与挑战 做嵌入式开发的朋友应该都遇到过这样的场景&#xff1a;设备明明还有电&#xff0c;却突然关机&#xff1b;或者电量显示从50%直接跳到20%&#xff0c;让人措手不及。这些问题背后&#xff0c;往往隐藏着ADC采样精度不足、硬件电路偏差、电池…...

别再让CPU等外设了!用Multi-Layer AHB搭建一个不堵车的片上‘高速公路网’

用Multi-Layer AHB构建片上系统的高效数据通道 堵在早高峰的高架桥上时&#xff0c;你有没有想过——芯片里的数据流其实也面临着类似的拥堵问题&#xff1f;当多个处理器核心、DMA控制器同时争抢总线带宽时&#xff0c;传统的单层AHB架构就像只有两条车道的城市主干道&#xf…...

微信聊天记录永久保存终极指南:如何用WeChatMsg完整备份你的数字记忆

微信聊天记录永久保存终极指南&#xff1a;如何用WeChatMsg完整备份你的数字记忆 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tre…...