JS面试之console的异步性怎么理解详解

 更新时间:2022年10月24日 11:24:40   作者:青天诀  
这篇文章主要为大家介绍了JS面试之console的异步性怎么理解详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

面试题目(字节):

console的异步性怎么理解?

答案解析:

console我一直以为是同步执行的,直到在一本书上看到,才了解到console本身有异步的特性。虽然在平常开发中经常使用console,但是真的没有意识到它的异步性。

下面就看下异步的实例

基础类型

该类型是我们开发中经常使用的,正是这种打印结果,让我们认为console是同步的。其实这种case也是异步的,因为执行到console时,拍摄了快照,记录了当时的变量值,当代码执行完返回到事件队列时,直接打印了前面记录的快照造成的。

let foo = 'bar';
console.log(foo);
foo = 'test';

引用类型

引用类型,可以帮我们很好的验证console的异步性。看下图中的打印结果,如果是同步的话,打印结果应该时{},但是却是修改后的值{foo: 'bar'}

主要是因为,obj是引用类型,执行到console时,只是存储了对象的引用,对于对象内部的值未做记录。当代码执行完后,obj内部的值已经被修改。返回事件队列后,打印出的结果实际是修改后的值。

let obj = {};
console.log(obj);
obj.foo = 'bar';

结论

以上示例,都是在浏览器中的表现,也就是浏览器中console实际是异步快照,node中的console是另一回事,它是严格同步的,因此同样的代码打印结果是{}

浏览器之所以这样,是因为,在许多程序中,I/O被认为是低速的阻塞环节。在浏览器中,console.log会被异步处理以提高性能

下面再看两道题目加深下理解

第一道

a = [1, 2, 3];
console.log(a, a.pop());

[1, 2], 3

第二道

这道题目很有特点,打印结果,展开前后值是不一样的。

person = {
	name: "张三",
	age: 18,
};
console.log(person);
person.name = "李四";
console.log(person);

console.log输出内容为对象,指向的是对象的地址,当点开对象进行查看时,才会去访问相应地址获取内容。所以点开对象后,会重新访问对象地址进行查询,因此之前的张三,变成了李四

以上就是JS面试之console的异步性怎么理解详解的详细内容,更多关于JS面试console异步性的资料请关注脚本之家其它相关文章!

相关文章

  • 第二篇Bootstrap起步

    第二篇Bootstrap起步

    这篇文章主要介绍了第二篇Bootstrap起步的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • JS中showModalDialog 的使用解析

    JS中showModalDialog 的使用解析

    JS中showModalDialog 的使用解析,需要的朋友可以参考一下
    2013-04-04
  • JavaScript制作简单的框选图表

    JavaScript制作简单的框选图表

    这篇文章主要为大家详细介绍了JavaScript制作一个简单的框选图表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • JavaScript实现各种排序的代码详解

    JavaScript实现各种排序的代码详解

    这篇文章给大家介绍了js实现各种排序功能,包括冒泡排序,选择排序和插入排序,代码简单易懂,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-08-08
  • H5用户注册表单页 注册模态框!

    H5用户注册表单页 注册模态框!

    这篇文章主要为大家详细介绍了H5用户注册表单页的相关代码,注册模态框,如何设计用户注册表单页,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • JS维吉尼亚密码算法实现代码

    JS维吉尼亚密码算法实现代码

    我想用JS实现对文本的加密和解密,想用维吉尼亚密码算法,谁有现成代码啊
    2010-11-11
  • 微信小程序 扭蛋抽奖机css3动画实现详解

    微信小程序 扭蛋抽奖机css3动画实现详解

    这篇文章主要介绍了微信小程序 扭蛋抽奖机css3动画实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • d3.js中冷门却实用的内置函数总结

    d3.js中冷门却实用的内置函数总结

    D3.js是一个JavaScript库,它可以通过数据来操作文档。D3可以通过使用HTML、SVG和CSS把数据鲜活形象地展现出来。d3.js其实提供了很多内置的函数,可以却被大家忽略了,下面这篇文章就来给大家详细介绍了d3.js中冷门却实用的一些内置函数,需要的朋友可以参考借鉴。
    2017-02-02
  • layui实现数据表格table分页功能(ajax异步)

    layui实现数据表格table分页功能(ajax异步)

    这篇文章主要为大家详细介绍了layui实现数据表格table分页功能、异步加载,表格渲染,含条件查询,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • JS实现禁止高频率连续点击的方法【基于ES6语法】

    JS实现禁止高频率连续点击的方法【基于ES6语法】

    这篇文章主要介绍了JS实现禁止高频率连续点击的方法,通过事件监听结合定时器实现针对高频率点击的限制操作,该功能基于ES6语法实现,需要的朋友可以参考下
    2017-04-04

最新评论