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

news/2025/1/16 1:45:54/

目录

一、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是宏任务,也就是说在异步中,会先完成所有的微任务,然后再去执行宏任务
 

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


http://www.ppmy.cn/news/998904.html

相关文章

Kafka3.0.0版本——Broker(总体工作流程)

目录 一、Kafka中Broker总体工作流程图解二、Kafka中Broker总体工作流程步骤解析 一、Kafka中Broker总体工作流程图解 总体工作流程图解 二、Kafka中Broker总体工作流程步骤解析 1、broker启动后在zk中注册&#xff0c;如下图所示&#xff1a; 2、controller谁先注册&…

cc2652主协处理器分时控制同一个外设的问题

问题已提交TI论坛&#xff0c;我是提交到的中文论坛&#xff0c;然后fae给转到英文论坛了。 简单描述就是&#xff0c;怎么让这个单片机一会用主处理器控制SPI设备&#xff0c;一会再用协处理器控制同一个设备。 主处理器的spi配置使用 CCS studio配置的 协处理器使用Sensor Co…

Qt应用开发(基础篇)——数值微调输入框QAbstractSpinBox、QSpinBox、QDoubleSpinBox

目录 一、前言 二、QAbstractSpinBox类 1、accelerated 2、acceptableInput 3、alignment 4、buttonSymbols 5、correctionMode 6、frame 7、keyboardTracking 8、readOnly 9、showGroupSeparator 10、specialValueText 11、text 12、wrapping 13、信号 二、Q…

上位机一般的开发工具?

上位机开发工具是用于开发和构建上位机应用程序的软件工具。它们提供了一系列功能和资源&#xff0c;帮助开发人员设计、编写和调试上位机应用程序。以下是一些常见的上位机开发工具&#xff1a;Visual Studio&#xff1a;作为一种集成开发环境&#xff08;IDE&#xff09;&…

元宇宙是概念炒作?

关键字&#xff1a;万界星空、万界星空科技、工业元宇宙、AR数字孪生、工业数字孪生、汽车数字孪生、机械加工数字孪生 引言 近两年被“元宇宙”席卷了&#xff0c;好多人问也好多人在各大媒体讨论过&#xff1a;“元宇宙到底是个啥&#xff1f;” 想必你也一定有所耳闻&…

力扣热题100 JavaScript--136. 只出现一次的数字

给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xff1a; 输入&#xff…

如何通过Python线程池实现异步编程?

线程池的概念和基本原理 线程池是一种并发处理机制&#xff0c;它可以在程序启动时创建一组线程&#xff0c;并将它们置于等待任务的状态。当任务到达时&#xff0c;线程池中的某个线程会被唤醒并执行任务&#xff0c;执行完任务后线程会返回线程池&#xff0c;等待下一个任务…

arcgis--连接到数据库失败--外部数据库驱动程序(1)

问题描述&#xff1a; 在加载Excel表格时出现以下问题&#xff0c;无法加载进来。 经过百般尝试&#xff0c;终于找到解决方法。 解决方案&#xff1a; 在微软官网下载accessDataEngine程序&#xff0c;并按照相关位数&#xff08;32位或64位&#xff09;安装&#xff0c;具…