对一篇关于zone.js in Angular2+的文章有疑问。我在读博格角大学的文章。我觉得有些地方有点神秘,有一些问题,我不确定我是否正确理解。该条规定:
区域只不过是一个在多个Javascript执行回合中幸存下来的执行上下文。
上面的语句是否意味着堆在事件队列中的多个异步回调只有一个执行上下文,因此this的值相同?
这是一种通用机制,我们可以使用它向浏览器添加额外的功能。角使用内部区域来触发变化检测。
async是在运行时改变settimeout函数(settimeout、AJAX等)的。这是否意味着,除了完成回调之外,回调还具有其他功能,用于检测更改。
我现在的理解正确吗?如果没有,有什么问题吗?
发布于 2018-05-15 07:46:39
上面的语句是否意味着堆在事件队列中的多个异步回调具有一个执行上下文,从而具有相同的值?
不是的。将执行上下文简单地(过度简化)看作是由在特定区域中运行的所有代码共享的对象。例如,在引导过程中,当角模块被初始化时,角创建(叉)一个称为“角”的区域。此外,它还设置了一个属性“‘isAngularZone”:没错。您可以将其看作是创建一个设置新属性的对象。现在,该属性将对在角区域运行(或计划运行)的所有代码可用,就像在角区域中运行的代码一样。但是,如果在角区域外运行代码,则无法访问此属性。
这是否意味着,除了完成回调之外,回调还具有其他功能,用于检测更改。
回调没有任何其他功能。它是Zone.js处理回调的方式,它提供了一些额外的角度功能,比如确定何时开始更改检测周期。例如,当您在setTimeout函数中传递回调时,它会被Zone.js包装在另一个函数中,并被替换为您的回调。我是猴补丁API。现在,当JS调用Zone.js包装回调时,它在实际调用回调方法之前执行各种操作。其中一个操作是将回调的调用通知区域(计划回调的区域)。在这里,如果该区域是“角”,它将产生事件,并将启动变化检测周期。
https://stackoverflow.com/questions/50339051
复制相似问题