主页

promise

promise构造函数是同步执行的,then方法是异步执行的 Promise new的时候会立即执行里面的代码 then是微任务 会在本次任务执行完的时候执行 setTimeout是宏任务 会在下次任务执行的时候执行 ``` const promise = new Promise((resolve, reject) => { console.log(1) resolve() console.log(2) }) promise.then(() => { console.log(3) }) console.log(4) //1,2,4,3 ```

阅读更多

css知识

替换元素 替换元素的尺寸从内而外分为3类:固有尺寸、HTML尺寸和CSS尺寸。 (1)固有尺寸指的是替换内容原本的尺寸。例如,图片、视频作为一个独立文件存在的时候,都是有着自己的宽度和高度的。 (2)HTML尺寸只能通过HTML原生属性改变,这些HTML原生属性包括img的width和height属性、input的size属性、textarea的cols和rows属性等。 (3)CSS尺寸特指可以通过CSS的width和height或者max-width/min-width和max-height/min-height设置的 尺寸,对应盒尺寸中的content box。 这3层结构的计算规则具体如下 (1)如果没有CSS尺寸和HTML尺寸,则使用固有尺寸作为最终的宽高。 (2...

阅读更多

浏览器任务

消息队列 1.添加一个消息队列; 2.IO 线程中产生的新任务添加进消息队列尾部; 3.渲染主线程会循环地从消息队列头部中读取任务,执行任务。 4.渲染进程专门有一个 IO 线程用来接收其他进程传进来的消息,接收到消息之后,会将这些消息组装成任务发送给渲染主线程,后续的步骤同上; 概述 通常我们把消息队列中的任务称为宏任务,每个宏任务中都包含了一个微任务队列,在执行宏任务的过程中,如果 DOM 有变化,那么就会将该变化添加到微任务列表中,这样就不会影响到宏任务的继续执行,因此也就解决了执行效率的问题。 等宏任务中的主要功能都直接完成之后,这时候,渲染引擎并不着急去执行下一个宏任务,而是执行当前宏任务中的微任务,因为 DOM 变化的事件都保存在这些微任务队列中,这样也就解...

阅读更多

闭包

function foo() { var myName = "极客时间" let test1 = 1 const test2 = 2 var innerBar = { setName:function(newName){ myName = newName }, getName:function(){ console.log(test1) return myName } } return innerBar} var bar = foo() bar.setName("极客邦") bar.getName() console.log(bar.getName()) 站在内存模型的角度来分析这段代码的执行流程。 1.当 JavaScr...

阅读更多

CORS

cross origin resource share 简单的请求 有些请求不会触发CORS预检。这些在本文中被称为“简单请求”,尽管Fetch规范(它定义了CORS)不使用该术语。不会触发CORS预检的请求(所谓的“简单请求”)是满足以下所有条件的请求: 唯一允许的方法是: GET HEAD POST CORS安全列表请求标头 除了由用户代理自动设置的标头(例如,Connection,User-Agent,或任何与所述抓取规格为“禁止的标题名称”定义名称其它标题的),其允许被手动设置仅标头是那些Fetch规范将其定义为“CORS安全列表请求标头”,它们是: Accept Accept-Langu...

阅读更多