首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular:先打印Console.log(11),然后打印console.log(1)。为什么?

在Angular中,先打印Console.log(11),然后打印console.log(1)的原因是因为Angular的变更检测机制。

Angular使用了Zone.js来实现变更检测,Zone.js会拦截所有的异步操作,包括定时器、事件等。当发生异步操作时,Zone.js会通知Angular进行变更检测,以更新视图。

在这个特定的情况下,Console.log(11)和console.log(1)都是同步操作,不会被Zone.js拦截。因此,先执行的是Console.log(11),然后才是console.log(1)。

需要注意的是,这个顺序可能会受到其他因素的影响,比如代码的执行顺序、异步操作的执行时间等。因此,在实际开发中,不应该依赖于这种顺序来编写代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Change Detection And Batch Update

({val: 2}); console.log(this.state.val); 打开控制台,点击按钮你会发现打印了0 0,同时页面数据也更新成了2。...,点击按钮你会发现打印1 2,相信这个时候很多人就懵了,为啥和第一种情况的输出不一致,不是说好的批量更新的么,怎么变成连续更新了。...Angular1是通过封装自动调用$apply,但是存在手动调用的场景,为了解决这个问题,Angular2没有采用1的实现机制,转而使用了Zone.js。...如果我们连续更新数据,Vue会立马更新DOM还是和React一样缓存下来等待状态稳定进行批量更新呢?...React和Angular1/2都是通过获取执行上下文来进行批量更新,但是React和Angular1支持的并不彻底,都有各自的问题。

3.7K70

Change Detection And Batch Update

({val: 2}); console.log(this.state.val); 打开控制台,点击按钮你会发现打印了0 0,同时页面数据也更新成了2。...,点击按钮你会发现打印1 2,相信这个时候很多人就懵了,为啥和第一种情况的输出不一致,不是说好的批量更新的么,怎么变成连续更新了。...Angular1是通过封装自动调用$apply,但是存在手动调用的场景,为了解决这个问题,Angular2没有采用1的实现机制,转而使用了Zone.js。...如果我们连续更新数据,Vue会立马更新DOM还是和React一样缓存下来等待状态稳定进行批量更新呢?...React和Angular1/2都是通过获取执行上下文来进行批量更新,但是React和Angular1支持的并不彻底,都有各自的问题。

3.3K40

Angular 组件通信

因为控制台打印的东西比较鸡肋,所以就不配图了,嗯~希望读者跟着说明代码走一遍更容易吸收~ 1. 父组件通过属性传递值给子组件 相当于你自定义了一个属性,通过组件的引入,将值传递给子组件。...-- child.component.html --> Hello! {{ parentProp }} 2....通过引用,父组件获取子组件的属性和方法 我们通过操纵引用的方式,获取子组件对象,然后对其属性和方法进行访问。...我们设置子组件的演示内容: // child.component.ts import { Component, OnInit } from '@angular/core'; @Component(...所以在父子组件中,一进来就会打印 msg 的初始值 null,然后过了一秒钟之后,就会打印更改的值 Jimmy。同理,如果你在子组件中对服务的信息,在子组件打印相关的值的同时,在父组件也会打印

1.9K20

多图生动详解浏览器与Node环境下的Event Loop

为什么这段代码先打印了 3 ,再打印了 2呢?...下面公布一下答案 // 正确答案: 1 3 5 4 2 这里你是否又有个疑问了,为什么 promise 和 setTimeout 同样是异步,为什么前者优先于后者?...,然后执行步骤1;若为空,直接执行步骤1 ……往复循环 那么我们来看一下刚才那段代码的具体调用过程吧(由于wx对动图的限制,我不得不把动图分成两部分,还请大家耐心观看,十分抱歉) 看完这段执行过程,...(() => { console.log(7); }) console.log(8); /* 打印结果: 3 4 6 8 7 5 1 2 */...(() => { console.log('setImmediate'); }); }); 多次运行代码发现,每次都是先打印了 setImmediate,然后打印的 setTimeout

66320

JavaScript Event Loop

这就是为什么当浏览器解析 JavaScript 代码时为什么会阻塞页面渲染,因为这两个事务在同一个线程里。...页面级代码执行完毕,执行微任务队列,首先是 then21,打印 then21,然后将它返回结果中的 then 函数放入微任务队列(此时任务队列变成:[then22, then11]) 外层的 Promise...('script end'); 还是跟之前一样,执行整体的同步代码,于是打印出 script start(然后会遇到 setTimeout,将其放入宏任务)、async1 start、async2(...同步代码执行完毕,执行微任务,微任务队列有两个函数,首先进去的是 await 后面的语句,因此执行它,于是打印出了 async1 end。然后执行 then 函数,于是打印出了 promise2。...然后执行微任务:promise3。然后执行宏任务首先会进入 timer Queue 宏任务,于是开始执行,打印出 timer1 然后打印出 timer2(这里就与浏览器端不同了)。

1.3K20

新生代总结 JavaScript 运行机制解析

附上本文的纲要,本文将会从这三个方面去解析 JavaScript 的运行机制 首先我们来谈谈 JavaScript 的单线程 1....为什么需要异步?...(4);},0) console.log(5); 这次输出了 1 – 5 – 2 – 4 – 3 可能会有人会对 3 的输出有疑惑,首先定时器都是异步任务,会被放入异步任务队列当中,需要等待异步任务返回结果后...("13"); 答案是:1 – 5 – 11 – 13 – 6 – 12 – 2 – 3 – 4 – 7 – 8 – 9 – 10 第一轮循环 从全局任务入口,首先打印日志 1 遇到宏任务 setTimeout...p2 遇到打印语句,直接打印日志 13 本轮循环共打印1 – 5 – 11 – 13 当前循环结果 第二轮循环 首先执行微任务队列 p1 和 p2 ,先进先出,先打印 6 再打印 12 微任务事件处理完毕

31120

新生代总结 JavaScript 运行机制解析

附上本文的纲要,本文将会从这三个方面去解析 JavaScript 的运行机制 首先我们来谈谈 JavaScript 的单线程 1....为什么需要异步?...(4);},0) console.log(5); 这次输出了 1 – 5 – 2 – 4 – 3 可能会有人会对 3 的输出有疑惑,首先定时器都是异步任务,会被放入异步任务队列当中,需要等待异步任务返回结果后...("13"); 答案是:1 – 5 – 11 – 13 – 6 – 12 – 2 – 3 – 4 – 7 – 8 – 9 – 10 第一轮循环 从全局任务入口,首先打印日志 1 遇到宏任务 setTimeout...p2 遇到打印语句,直接打印日志 13 本轮循环共打印1 – 5 – 11 – 13 当前循环结果 第二轮循环 首先执行微任务队列 p1 和 p2 ,先进先出,先打印 6 再打印 12 微任务事件处理完毕

39830

Vue引发的getter和setter

看着文档研究了一下vue的双向数据绑定,打印出Vue实例下的data对象里的属性时,发现了一个有趣的事情: 它的每个属性都有两个相对应的get和set方法,我觉的这是多此一举的,于是去网上查了查Vue双向绑定的实现原理...,才发现它和Angular.js双向绑定的实现原理完全不同,Angular是用的数据脏检测,当Model发生变化,会检测所有视图是否绑定了相关数据,再更改视图。...中的data对象,打印出来的效果是一样的,都拥有get和set属性。...我们创建一个对象字面量: var Coder = function() {...}...接下来创建一个码农的实例,isMe;此时,isMe是没有name属性的,当我们调用isMe.name时,我们会进入到get name(){...}中,判断isMe是否有name属性,答案是否定的,那麽就添加一个

1.5K70

js的event loop

2,放进宏任务队列并延时1000毫秒后执行定时器里面的代码 打印同步代码555 主线程完成,查看任务队列,发现有两个宏任务,宏任务1最先执行,首先打印222,然后遇到for循环打印2次888 然后在宏任务...1里又遇到定时器,宏任务3,放进宏任务并延时0秒后开始执行定时器里面的代码,然后宏任务1完成,值得注意的是,当前宏任务2在后来的宏任务3前面,但是宏任务2延时1000毫秒后执行(从进入任务队列一刻算起,...,但是它是延时0秒后执行,所以,宏任务3会执行 执行宏任务3,打印333,执行完成后看宏任务,还剩一个宏任务2 任执行宏任务2,由于之前的操作很快,还没到1000毫秒就已经执行完了,这时宏任务还是会会继续等到了...(t => { // t1 console.log(t) }); console.log(3); 执行流程: script 任务运行。...执行所有的微任务,先后取出 t2 和 t1,分别输出 2 和 1 代码执行完毕,输出是:4321 为什么会t2执行,理由如下: https://es6.ruanyifeng.com/#docs/promise

93520
领券