JavaScript
文章平均质量分 66
JS 的小收获
窗燃烟逝
这个作者很懒,什么都没留下…
展开
-
setTimeout 和 setInterval
异步编程当然少不了定时器了,常见的定时器函数有setTimeout、、。最常用的是setTimeout,很多人认为setTimeout是延时多久,那就应该是多久后执行。其实这个观点是错误的,因为 JS 是单线程执行的,如果前面的代码影响了性能,就会导致setTimeout不会按期执行。当然了,可以通过代码去修正setTimeout接下来看,其实这个函数作用和setTimeout基本一致,只是该函数是每隔一段时间执行一次回调函数。通常来说不建议使用。第一,它和setTimeout。...原创 2022-08-17 23:39:59 · 271 阅读 · 0 评论 -
闭包基础理解
前提知识点: 执行上下文和垃圾回收机制,创建闭包的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问到当前函数的局部变量。. 有两种常用用途函数作为参数被传递函数作为返回值被返回闭包的第一个用途是使我们在函数外部能够访问到函数内部的变量。通过使用闭包,可以通过在外部调用闭包函数,从而在外部访问到函数内部的变量,可以使用这种方法来创建私有变量。闭包的另一个用途是使已经运行结束的函数上下文中的变量对象继续留在内存中,因为闭包函数保留了这个变量对象的引用,所以这个变量对象不会被回收。...原创 2022-08-17 23:37:35 · 90 阅读 · 0 评论 -
cookie 、localStorage 和 sessionStorage 区别
上面几种方式都是存储少量数据的时候的存储方式,当需要在本地存储大量数据的时候,我们可以使用浏览器的 indexDB 这是浏览器提供的一种本地的数据库存储机制。它不是关系型数据库,它内部采用对象仓库的形式存储数据,它更接近 NoSQL 数据库。浏览器端常用的存储技术是 cookie 、localStorage 和 sessionStorage。...原创 2022-08-15 23:03:29 · 571 阅读 · 0 评论 -
强缓存和协商缓存
强缓存策略和协商缓存策略在缓存命中时都会直接使用本地的缓存副本,区别只在于协商缓存会向服务器发送一次请求。它们缓存不命中时,都会向服务器发送请求来获取资源。在实际的缓存机制中,强缓存策略和协商缓存策略是一起合作使用的。浏览器首先会根据请求的信息判断,强缓存是否命中,如果命中则直接使用资源。如果不命中则根据头信息向服务器发起请求,使用协商缓存,如果协商缓存命中的话,则服务器不返回资源,浏览器直接使用本地资源的副本,如果协商缓存不命中,则浏览器返回最新的资源给浏览器。...原创 2022-08-12 23:22:15 · 4622 阅读 · 0 评论 -
浏览器的缓存机制
服务器在返回资源的时候,在头信息中添加了 Etag 属性,这个属性是资源生成的唯一标识符,当资源发生改变的时候,这个值也会发生改变。如果不命中则根据头信息向服务器发起请求,使用协商缓存,如果协商缓存命中的话,则服务器不返回资源,浏览器直接使用本地资源的副本,如果协商缓存不命中,则浏览器返回最新的资源给浏览器。浏览器的缓存机制指的是通过在一段时间内保留已接收到的 web 资源的一个副本,如果在资源的有效时间内,发起了对这个资源的再一次请求,那么浏览器会直接使用缓存的副本,而不是向服务器发起请求。...原创 2022-08-12 23:20:55 · 188 阅读 · 0 评论 -
CSRF 攻击
这种方法解决了使用 cookie 单一验证方式时,可能会被冒用的问题,但是这种方法存在一个缺点就是,我们需要给网站中的所有请求都添加上这个 token,操作比较繁琐。第三种方式使用双重 Cookie 验证的办法,服务器在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串,然后当用户再次向服务器发送请求的时候,从 cookie 中取出这个字符串,添加到 URL 参数中,然后服务器通过对 cookie 中的数据和参数中的数据进行比较,来进行验证。同时这种方式不能做到子域名的隔离。...原创 2022-08-10 23:51:25 · 1751 阅读 · 0 评论 -
XSS攻击
对于第一个方面,如果我们对存入数据库的数据都进行的转义处理,但是一个数据可能在多个地方使用,有的地方可能不需要转义,由于我们没有办法判断数据最后的使用场景,所以直接在输入端进行恶意代码的处理,其实是不太可靠的。XSS 的本质是因为网站没有对恶意代码进行过滤,与正常的代码混合在一起了,浏览器没有办法分辨哪些脚本是可信的,从而导致了恶意代码的执行。存储型指的是恶意代码提交到了网站的数据库中,当用户请求数据的时候,服务器将其拼接为 HTML 后返回给了用户,从而导致了恶意代码的执行。...原创 2022-08-10 23:49:23 · 2152 阅读 · 0 评论 -
基础理解网络模型
该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。这些都是物理层的传输介质。网络层与数据链路层的对比,通过上面的描述,我们或许可以这样理解,网络层是规划了数据包的传输路线,而数据链路层就是传输路线。寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。在每一层都工作着不同的设备,比如我们常用的交换机就工作在数据链路层的,一般的路由器是工作在网络层的。...原创 2022-08-09 23:45:19 · 153 阅读 · 0 评论 -
当在浏览器中输入 Google.com 并按下回车之后发生了什么?
3)**DNS解析:**下一步首先需要获取的是输入的 URL 中的域名的 IP 地址,首先会判断本地是否有该域名的 IP 地址的缓存,如果有则使用,如果没有则向本地 DNS 服务器发起请求。本地 DNS 服务器也会先检查是否存在缓存,如果没有就会先向根域名服务器发起请求,获得负责的顶级域名服务器的地址后,再向顶级域名服务器请求,然后获得负责的权威域名服务器的地址后,再向权威域名服务器发起请求,最终获得域名的 IP 地址后,本地 DNS 服务器再将这个 IP 地址返回给请求的用户。...原创 2022-08-09 23:42:49 · 108 阅读 · 0 评论 -
简单理解 JS 事件循环
因为 js 是单线程运行的,在代码执行的时候,通过将不同函数的执行上下文压入执行栈中来保证代码的有序执行。在执行同步代码的时候,如果遇到了异步事件,js 引擎并不会一直等待其返回结果,而是会将这个事件挂起,继续执行执行栈中的其他任务。当异步事件执行完毕后,再将异步事件对应的回调加入到与当前执行栈中不同的另一个任务队列中等待执行。任务队列可以分为宏任务对列和微任务对列,当当前执行栈中的事件执行完毕后,js 引擎首先会判断微任务对列中是否有任务可以执行,如果有就将微任务队首的事件压入栈中执行。...原创 2022-08-03 23:53:05 · 162 阅读 · 0 评论 -
JavaScript 中的 this
this 是执行上下文中的一个属性,它指向最后一次调用这个方法的对象。在实际开发中,this 的指向可以通过四种调用模式来判断。使用构造器调用模式的优先级最高,然后是 apply、call 和 bind 调用模式,然后是方法调用模式,然后是函数调用模式。this 取值是从函数执行的时候判定的, 而不是定义的时候判定的。箭头函数的 this 取上级作用域的值。...原创 2022-08-03 23:47:21 · 180 阅读 · 0 评论 -
JS 原型原型链
可以看到重写原型的时候p的构造函数不是指向Person了,因为直接给Person的原型对象直接用对象赋值时,它的构造函数指向的了根构造函数Object,所以这时候。所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性,和。in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。原型链上的所有原型都是对象,所有的对象最终都是由。是构造函数,原型链终点是。,所以,原型链的终点是。...原创 2022-08-02 23:49:45 · 223 阅读 · 0 评论 -
JS 预编译
JavaScript 是解释性语言, 即编译一行, 执行一行. 但在编译前存在预编译过程.预编译分为两种, 全局的预编译(代码执行前)和函数的预编译(函数执行前).原创 2022-08-02 23:45:30 · 107 阅读 · 0 评论 -
JS 练手 (更新中)
JS 练习题 日更原创 2022-07-08 17:11:47 · 155 阅读 · 0 评论