js 是单线程吗?
前言
在html5中,js中允许操作多个线程执行,但是不能操作dom元素,这是一个痛点。
但是在mvvm依然存在很大的作用力,因为我们只需要操作数据,在操作数据的时候委托机制在主线程中就实现了对dom元素的操作。
那么setouttime,和setInterval是怎么形成的?他们难道不是多线程操作吗?是的,他们不是多线程操作,甚至可以说他们是延迟操作,而不是真正的等待多长时间去执行。
其实这就解释了两个我们遇到的两个问题,一个是为什么js可以后定义先使用,一个是为什么方法的位置可以不分先后顺序。
解释
js线程,分为同步编程,还有一个是异步编程,这两者其实关系并不大,我说的并不大是因为他们不是本质上的同步编程和异步编程,而是先执行了同步然后去执行异步。
第一个问题的解释:在编程中,我们看到了很多不同的思想方案,在js中所以变量其实是建立了一个树的概念,其实是先有了windows树,那么才开始执行代码,所以这就解释了为什么我们可以不声明就可以使用,是的,同时也解释了为什么我们使用的时候为null,因为这是默认值。
第二个问题也好解释了,windows树不仅包括了变量名还包括了方法。
定时器
那为什么定时器是像是执行了多线程代码?很简单,时间不可信。当我们执行定时器的时候,其实是在最后执行的。
比如:
function test()
{
setouttime('()=>{console.log('定时器先执行')}',0);
console .log('我先执行')
}
那么将会输‘出我先执行‘这个概念。因为将setouttime没有分配到栈中,而是分配到了任务队列中,只有等到主程序被k了,那么再来变量一次任务,如此循环下去而已。
所以说单线程的时间不可信。
js 是单线程吗?的更多相关文章
- js的单线程和异步
		前言 说到js的单线程(single threaded)和异步(asynchronous),很多同学不禁会想,这不是自相矛盾么?其实,单线程和异步确实不能同时成为一个语言的特性.js选择了成为单线程的 ... 
- 多进程浏览器、多线程页面渲染与js的单线程
		线程与进程 说到单线程,就得从操作系统进程开始说起.在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位.任务调度采用的是时间片轮转的抢占式调度方式,而进程 ... 
- js异步梳理:1.从浏览器的多进程到JS的单线程,理解JS运行机制
		大家很早就知道JS是一门单线程的语言.但是也时不时的会看到进程这个词.首先简单区分下线程和进程的概念 1. 简单理解进程 - 进程是一个工厂,工厂有它的独立资源 - 工厂之间相互独立 - 线程是工厂中 ... 
- JS是单线程的吗?
		Javascript是单线程的深入分析 首先一个引子:为什么JavaScript是单线程的却能让AJAX异步发送和回调请求,还有setTimeout也看起来像是多线程的? 先看例子1: functio ... 
- js的单线程与异步
		一. js 是单线程和异步 1. js 是单线程的,js 的宿主环境(浏览器)是多线程的,实现异步. 2.js是单线程语言,浏览器值分配给js一个主线程,用来执行任务(函数),但一次只能执行一个任务, ... 
- 为什么JS是单线程?JS中的Event Loop(事件循环)?JS如何实现异步?setimeout?
		https://segmentfault.com/a/1190000012806637 https://www.jianshu.com/p/93d756db8c81 首先,请牢记2点: (1) JS是 ... 
- 浏览器的多线程和js的单线程--前端易混淆知识科普(一)
		问题:js是单线程的,页面是从上往下加载的,那么是不是第一个js没加载完成,第二个js就不加载?然后,引申出来一个问题就是,那css和图片呢?这之间的加载有相互影响吗? 1.什么是线程?什么是进程?什 ... 
- JS高阶---为什么说JS是单线程执行的???
		大纲: [主体] (1)如何证明JS运行是单线程的? 上述代码执行顺序结果为:fn()→timeout →timeout 接下来对上述代码做下修改 执行结果如右图所示 接下来点击确认,关闭弹框,再往后 ... 
- 深入学习JS执行--单线程的JS
		一.介绍 随着js不断学习,你可能会慢慢的好奇,用了这么久的js,却不知道这js在浏览器怎么被执行的,很尴尬.所以,我查阅很多资料来总结JS的执行过程,也分享出来,和大家一起学习. 本篇主要讲单线程的 ... 
- 好程序员web前端分享如何理解JS的单线程
		好程序员web前端分享如何理解JS单线程,JS本质是单线程的.也就是说,它并不能像JAVA语言那样,两个线程并发执行. 但我们平时看到的JS,分明是可以同时运作很多任务的,这又是怎么回事呢? 首先,J ... 
随机推荐
- jquery ui autocomplete ajax返回数据自定义显示
			1.body里面的内容 <input type="text" class="inputTxt" id="txtJigou" autoc ... 
- centos7通过配置hosts.allow和hosts.deny限制登陆
			etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的,通过他可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务. 我们通常只对管理员开放SSH登录, ... 
- MySQL基础篇快速记忆和查询
			查询 语法: SELECT 标识选择哪些列 FROM 标识从哪个表中选择 去重(Distinct) 在SELECT语句中使用关键字DISTINCT去除重复行 SELECT DISTINCT depar ... 
- 基于python的opus编解码实力解析
			一 opus pyogg是一个非常不错的库,用这个做音频的编码和解码非常方便. 二 源码解析 import wave from pyogg import OpusEncoder from ... 
- 将Maven和Plugins的源都改为阿里镜像的Setting.xml
			<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ... 
- mybatis-plus处理blob字段
			转载自:www.javaman.cn 在 Spring Boot 项目中使用 MyBatis-Plus 处理 longblob 字段时,我们可以按照以下步骤进行操作.假设 longblob 存储的是字 ... 
- leetcode算法之Valid Anagram
			原文算法说明如下: Given two strings s and t, write a function to determine if t is an anagram of s. For exam ... 
- 腾讯Linux 运维工程师面试真题
			腾讯Linux 运维工程师面试真题 1. 如何防止 DDOS 攻击?如提供足够资源给你,要保证用户访问不影响. 首先确定攻击源范围,如果是处于公司内部,那么暂时性的将这一区域的内部网络封掉,如 果是外 ... 
- 【STM32F4 HAL】MPU6050食用
			关于MPU6050模块的食用>_<(本人比较菜,写的不好或有错误的地方欢迎大佬指出) 最近学校冬令营发了个MPU6050模块,第一次弄也花了我花了不少时间,于是就把其中一些步骤以及要点简单 ... 
- 三维模型OBJ格式轻量化顶点压缩主要技术方法分析
			三维模型OBJ格式轻量化顶点压缩主要技术方法分析 三维模型的OBJ格式轻量化中,顶点压缩是一项重要的技术方法,用于减小模型文件的大小.以下是关于三维模型OBJ格式轻量化顶点压缩的主要技术方法的分析: ... 
