微醺岁月
微醺岁月
mark
**这是隐式转换的玄学。** 我们先看看ECMAScript规范对一元运算符的规范: **一元+ 运算符** 一元+运算符将其操作数转换为Number类型并反转其正负。注意负的+0产生-0,负的-0产生+0。 产生式 UnaryExpression : - UnaryExpression 按照下面的过程执行 : 1. 令 expr 为解释执行 UnaryExpression 的结果 . 2. 令 oldValue 为 ToNumber(GetValue(expr)). 3. 如果 oldValue is NaN ,return...
博主还没写事件循环和浏览器渲染机制这块,借宝地这里有个问题提前探讨一下。 ```html Hello function printH2() { console.log('first script', document.querySelectorAll('h2')); } printH2() setTimeout(printH2) World console.log('second script'); ``` 这个demo的效果是:控制台先打印出来了printH2(),setTimeout(printH2)的结果(说明此时的DOMtree已经完成),然后浏览器显示了页面,页面完全显示之后(RenderTree完成)才执行了 console.log('second script'); 有个地方不明白,就是js的异步任务与UI线程之间的调度,这个demo的结果来看,DOM节点渲染之后生成DOMtree才开始执行 setTimeout(printH2)的printH2函数,所以打印出了两个h2节点。 博主能帮忙解答一下UI线程和异步任务之间的关系到底是怎么样的吗?或者对于这一块有什么好的文章学习吗
* CSS(外链或内联)会阻塞整个DOM的渲染(Rendering),然而DOM解析(Parsing)会正常进行 * 很多浏览器中,CSS会延迟脚本执行和DOMContentLoaded事件 * JS(外链或内联)会阻塞后续DOM的解析(Parsing),后续DOM的渲染(Rendering)也将被阻塞 * JS前的DOM可以正常解析(Parsing)和渲染(Rendering) 但是,我不明白的是,既然CSS会延迟脚本的执行,我把bootstrap那个换成内联样式,就是不发送http请求下载那个css样式,好像结果又变了,这时候构建CSStree好像并没有阻塞js脚本的执行,那么,到底是HTTP线程阻塞了脚本的执行,还是构建CSStree阻塞了脚本执行? 如果是HTTP线程阻塞了js的执行,这个也可以解释,为什么多个js并行下载,要等全部下载完成才执行一个道理,我继续尝试了一下,换成img标签,这个也会发送http请求,但是这个并不会阻塞脚本的执行。 如果是构建CSStree阻塞了线程,根据上面实践的结果,发现构建CSStree并没有阻塞脚本的运行。之前看到的下面的这个说法,也就不成立。 >**JS 的执行有可能依赖最新样式。** 比如,可能会有 var width = $('#id').width(). 这意味着,JS 代码在执行前,浏览器必须保证在此 JS 之前的所有 css(无论外链还是内嵌)都已下载和解析完成。这是 CSS 阻塞后续 JS 执行的根本原因。 那么我的猜测就是,发送的请求是是样式文件会阻塞js脚本的执行,但为什么css会阻塞js脚本文件的执行,这个我暂时也不清楚,还有浏览器预加载一些机制也不太清楚。JS 的执行有可能依赖最新样式???难道我测的结果有问题?
`HTML5`规范要求: 脚本执行前,出现在当前``之前的``必须完全载入。 脚本执行会阻塞`DOM`解析。 `CSS`外链阻塞了脚本的执行,此时异步队列的任务该如何调度呢?我想`JS`引擎主线程遇到阻塞后,这时候就会放弃当前线程的代码执行,这时候`JS`引擎是空闲的,为了避免等待白白浪费时间,所以主线程才会读取任务队列,开始执行异步任务。等`CSS`外链下载完成之后`console.log('second script')`难道成了下一个`task`? 还有就是别人总结的这句话,一直不太懂,这种循坏机制到底是怎么工作的,描述的也比较抽象。 >同时,异步任务又可以分为两种,macrotask(宏任务)和micro(微任务)。在挂起任务时,JS 引擎会将所有任务按照类别分到这两个队列中,首先在 macrotask 的队列(这个队列也被叫做 task queue)中取出第一个任务,执行完毕后取出 microtask 队列中的所有任务顺序执行;之后再取 macrotask 任务,周而复始,直至两个队列的任务都取完。 😨😨😨,浏览器渲染解析线程调度这一块任重而道远。
大佬,怎么才能成为国服第二切图仔,还望指点迷津啊
我还是把目标降低一点,成为国服第三切图仔,这样就不用从删库到跑路,从跑路到监狱了。
```JavaScript var foo = { bar: function () { alert(this); } }; foo.bar(); (foo.bar)(); (foo.bar = foo.bar)(); (false || foo.bar)(); (foo.bar, foo.bar)(); ``` 补充几个加强理解😂
业务是业务,学习是学习,学习深了对业务代码都一目了然😏
大佬竟然有两个github号,原来和胡子大哈是同一个人,大佬这篇文章可以引用吗😂