浏览器内存中哪里有可观察对象?

时间:2019-01-09 07:58:08

标签: javascript asynchronous reactive-programming observer-pattern

当我们创建可观察对象时,它是否存储在堆中?

它是围绕数据源包装对象还是数组对象或单个值或事件(它将源包装到对象中并存储在内存中)作为内存中的资源?

(可观察对象)是否向操作系统发送信号,是否中断命令以根据接收到的数据执行特定操作,并在当前事件循环后将回调函数推入执行堆栈?

/// 已编辑 /// Rxjs库创建的可观察对象

1 个答案:

答案 0 :(得分:1)

可观察对象作为所有用户区javascript对象存储在堆中。

就内存而言,它是对源的包装,就像您可以将对象包装在另一个对象中一样:

let object = { somekey: 'somevalue' };
let wrapper = { object: object }; // We just "wrapped" object

为回答有关时间,操作系统和可能发生的中断的问题:不。可观察对象仍在javascript中,因此请使用javascript并发。他们不会以任何方式摆脱事件循环。

基本上,可观察对象是事件侦听器的抽象。您可以通过document.addEventListener('scroll', () => {})之类的事件进行观察。当您创建一个使用该事件作为源的Observable时,将在事件监听器被调用时立即调用它,因此Observables没有特殊的或不可思议的计时。