前言

在html5中,js中允许操作多个线程执行,但是不能操作dom元素,这是一个痛点。

但是在mvvm依然存在很大的作用力,因为我们只需要操作数据,在操作数据的时候委托机制在主线程中就实现了对dom元素的操作。

那么setouttime,和setInterval是怎么形成的?他们难道不是多线程操作吗?是的,他们不是多线程操作,甚至可以说他们是延迟操作,而不是真正的等待多长时间去执行。

其实这就解释了两个我们遇到的两个问题,一个是为什么js可以后定义先使用,一个是为什么方法的位置可以不分先后顺序。

解释

js线程,分为同步编程,还有一个是异步编程,这两者其实关系并不大,我说的并不大是因为他们不是本质上的同步编程和异步编程,而是先执行了同步然后去执行异步。

第一个问题的解释:在编程中,我们看到了很多不同的思想方案,在js中所以变量其实是建立了一个树的概念,其实是先有了windows树,那么才开始执行代码,所以这就解释了为什么我们可以不声明就可以使用,是的,同时也解释了为什么我们使用的时候为null,因为这是默认值。

第二个问题也好解释了,windows树不仅包括了变量名还包括了方法。

定时器

那为什么定时器是像是执行了多线程代码?很简单,时间不可信。当我们执行定时器的时候,其实是在最后执行的。

比如:

function test()
{
setouttime('()=>{console.log('定时器先执行')}',0);
console .log('我先执行')
}

那么将会输‘出我先执行‘这个概念。因为将setouttime没有分配到栈中,而是分配到了任务队列中,只有等到主程序被k了,那么再来变量一次任务,如此循环下去而已。

所以说单线程的时间不可信。

js 是单线程吗?的更多相关文章

  1. js的单线程和异步

    前言 说到js的单线程(single threaded)和异步(asynchronous),很多同学不禁会想,这不是自相矛盾么?其实,单线程和异步确实不能同时成为一个语言的特性.js选择了成为单线程的 ...

  2. 多进程浏览器、多线程页面渲染与js的单线程

    线程与进程 说到单线程,就得从操作系统进程开始说起.在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位.任务调度采用的是时间片轮转的抢占式调度方式,而进程 ...

  3. js异步梳理:1.从浏览器的多进程到JS的单线程,理解JS运行机制

    大家很早就知道JS是一门单线程的语言.但是也时不时的会看到进程这个词.首先简单区分下线程和进程的概念 1. 简单理解进程 - 进程是一个工厂,工厂有它的独立资源 - 工厂之间相互独立 - 线程是工厂中 ...

  4. JS是单线程的吗?

    Javascript是单线程的深入分析 首先一个引子:为什么JavaScript是单线程的却能让AJAX异步发送和回调请求,还有setTimeout也看起来像是多线程的? 先看例子1: functio ...

  5. js的单线程与异步

    一. js 是单线程和异步 1. js 是单线程的,js 的宿主环境(浏览器)是多线程的,实现异步. 2.js是单线程语言,浏览器值分配给js一个主线程,用来执行任务(函数),但一次只能执行一个任务, ...

  6. 为什么JS是单线程?JS中的Event Loop(事件循环)?JS如何实现异步?setimeout?

    https://segmentfault.com/a/1190000012806637 https://www.jianshu.com/p/93d756db8c81 首先,请牢记2点: (1) JS是 ...

  7. 浏览器的多线程和js的单线程--前端易混淆知识科普(一)

    问题:js是单线程的,页面是从上往下加载的,那么是不是第一个js没加载完成,第二个js就不加载?然后,引申出来一个问题就是,那css和图片呢?这之间的加载有相互影响吗? 1.什么是线程?什么是进程?什 ...

  8. JS高阶---为什么说JS是单线程执行的???

    大纲: [主体] (1)如何证明JS运行是单线程的? 上述代码执行顺序结果为:fn()→timeout →timeout 接下来对上述代码做下修改 执行结果如右图所示 接下来点击确认,关闭弹框,再往后 ...

  9. 深入学习JS执行--单线程的JS

    一.介绍 随着js不断学习,你可能会慢慢的好奇,用了这么久的js,却不知道这js在浏览器怎么被执行的,很尴尬.所以,我查阅很多资料来总结JS的执行过程,也分享出来,和大家一起学习. 本篇主要讲单线程的 ...

  10. 好程序员web前端分享如何理解JS的单线程

    好程序员web前端分享如何理解JS单线程,JS本质是单线程的.也就是说,它并不能像JAVA语言那样,两个线程并发执行. 但我们平时看到的JS,分明是可以同时运作很多任务的,这又是怎么回事呢? 首先,J ...

随机推荐

  1. centos 7与8修改主机名的各种方法

    hostname 查看当前系统主机名,知道当前主机名为localhost 当然在centos7特地添加了hostnamectl命令查看,修改主机名 使用hostnamectl set-hostname ...

  2. forward配置

    Adb connect 127.0.0.1:62001 adb forward tcp:27042 tcp:27042     #设置端口转发 adb forward tcp:27043 tcp:27 ...

  3. mysql中innodb创建表的一些限制

    1. 背景 在新创建mysql数据表的时候.不太确定表能创建多少个字段,多少个索引.索引多少有限制么?mysql的数据是怎么存储的存在在哪里. 2.基本个数限制 在MySQL5.6.9以后的版本,一个 ...

  4. MYSQL索引-下

    前言 丁奇老师的 MYSQL45讲 的关于索引的的两节 深入浅出索引,做个笔记 覆盖索引 插入一个实例表 mysql> create table T ( ID int primary key, ...

  5. ENVI为遥感影像设置空间坐标系的方法

      本文介绍基于ENVI软件,对不含有任何地理参考信息的栅格遥感影像添加地理坐标系或投影坐标系等地理参考信息的方法.   我们先来看一下本文需要实现的需求.现有以下两景遥感影像,其位于不同的空间位置: ...

  6. spring boot 自动装载对象为null问题的解决

    情况描述 有个Server类,成员变量是spring中自动管理的bean类对象 public class Server { @Autowired private CommandMapper comma ...

  7. 喜报|3DCAT入选“灵境杯”深圳市最佳元宇宙案例!

    2022年11月10日~11日,2022全球元宇宙大会深圳站胜利召开,在本次大会上重磅发布"灵境杯"全球元宇宙创新大赛成果,公布深圳最具潜力元宇宙入选企业. 创新大赛结合" ...

  8. Excalidraw:绘制图形的新利器

    摘要: Excalidraw是一款简洁设计.直观易用的绘图应用,用户可以通过它创建流程图.示意图.架构图等各种图形.除了提供手绘效果外,Excalidraw还支持多人实时协作编辑,并提供端到端加密以确 ...

  9. 反射改变TabLayout属性

    目录介绍 01.遇到的实际需求分析 02.原生TabLayout局限 03.TabLayout源码解析 3.1 Tab选项卡如何实现 3.2 滑动切换Tab选项卡 3.3 Tab选项卡指示线宽度 04 ...

  10. 三维模型OBJ格式轻量化的数据压缩与性能平衡分析

    三维模型OBJ格式轻量化的数据压缩与性能平衡分析 三维模型的OBJ格式轻量化数据压缩在保持性能的同时,可以减小文件大小.提高加载速度和节省存储空间.然而,在进行数据压缩时,需要权衡压缩比率和模型质量之 ...