React源码中看到的一处疑惑点
问题描述
代码位于 React
初次 render 时的 batch
逻辑
因为对这些位操作不太熟悉,看了半天也没有搞懂这块逻辑是为了判断什么,有没有对 JS 位操作熟悉的大佬帮忙解释一下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
代码位于 React
初次 render 时的 batch
逻辑
因为对这些位操作不太熟悉,看了半天也没有搞懂这块逻辑是为了判断什么,有没有对 JS 位操作熟悉的大佬帮忙解释一下
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
首先要理解位运算的规则:
0b100 & 0b110 = 0b100
0b100 | 0b110 = 0b110
~ 0b100 = 0b011
完整的规则列表在这里 按位操作符
下面看具体的示例,假设有两种权限位:
&= ~
&= ~ 是删除的意思,a &= ~ b 等价于 a = a & (~b),意为从a 中删除b 举例来看:
想从user 中 删除r权限,先对r 取反
再和user按位与
再看此时的user = 0b010,和w是一样的,而最初的user 为 0b110,兼具w 和 r的权限,现在只剩一个w,实现了删除的效果。
|=
相当于重新赋值,a |= b,等价于 a = a | b。现在为r重新赋予权限:
此时的r中的1的位置包含了原有的r 和 w中的1的位置。所以新r具有读和写的权限。
以上是对截图中的位操作符的解释,我自己也在看源码,恰巧研究过React完整的位运算,最新的React的master代码已将优先级模型从expirationTime换成了Lanes,涉及到大量的位运算,我做了尽量完整的注释ReactFiberLane.js
希望有所帮助。