zoukankan      html  css  js  c++  java
  • js 是单线程吗?

    前言

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

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

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

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

    解释

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

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

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

    定时器

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

    比如:

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

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

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

  • 相关阅读:
    《Intel汇编第5版》 汇编逆转字符串
    《Intel汇编第5版》 汇编拷贝字符串
    《Intel汇编第5版》 数组求和
    《Intel汇编第5版》 Mov指令
    CABasicAnimation 几种停止的回调
    模拟器SDK路径
    《Intel汇编第5版》 Intel CPU小端序
    《Intel汇编第5版》 汇编减法程序
    Iphone CPU 架构类型
    越狱开发-创建真正的后台程序(Daemon Process)
  • 原文地址:https://www.cnblogs.com/aoximin/p/13035979.html
Copyright © 2011-2022 走看看