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

jsevent loop

JsEvent Loop js单线程 ​ 总所周知,JavaScript是单线程的,也就是说同一时间只能做一件事,那为什么JavaScript不能是多线程的呢,这跟它的用途有关,作为浏览器脚本语言...因此为了避免这种问题,js必须是一门单线程的语言! 任务队列 ​ 所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。...task) 等待执行栈和微任务队列都执行完毕才会执行,并且在执行完每一个宏任务之后,会去看看微任务队列有没有新添加的任务,如果有,会先将微任务队列中的任务清空,才会继续执行下一个宏任务 为了更好地理解Event...Loop,请看下图(转引自Philip Roberts的演讲《Help, I'm stuck in an event-loop》) 案例 案例1 console.log(111); setTimeout...需要注意的是,立即resolve()的 Promise 对象,是在本轮“事件循环”(event loop)的结束时执行,而不是在下一轮“事件循环”的开始时。

91720
您找到你想要的搜索结果了吗?
是的
没有找到

JS 手写: call、apply、bind

# Try it bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。...当使用 bind 在 setTimeout 中创建一个函数(作为回调提供)时,作为 thisArg 传递的任何原始值都将转换为object。...# 描述 bind() 函数会创建一个新的绑定函数(bound function,BF)。...# 示例 # 创建绑定函数 bind() 最简单的用法是创建一个函数,不论怎么调用,这个函数都有同样的 this 值。...只要将这些参数(如果有的话)作为 bind() 的参数写在 this 后面。当绑定函数被调用时,这些参数会被插入到目标函数的参数列表的开始位置,传递给绑定函数的参数会跟在它们后面。

1.4K30

js中的事件(event

//标准浏览器中:定义一个形参e,但当事件触发的时候,并没有给e赋实际的值,则浏览器会把”事件“的对象赋给这个形参e,这时这个e是个系统级的对象:事件; IE中的事件对象是个全局的属性window.event...,而标准浏览器的事件对象就是形参e; 所以事件对象的兼容性写法为:e = e||window.event; 以下是常用的事件对象的属性: var x =e.clientX,y=e.clientY;所有浏览器都支持...当你在网页上点击鼠标右键的时候会出现一个右键菜单;当你在一个form表单里点击提交按钮时网页会产生一个行为病刷新网页,当你网页上滚动鼠标滚轮的时候,页面的滚动条会滚动等等;这些都叫事件的默认行为,如果想把这些默认行为取消了,相应的js...他的click事件都会最终传播到document上;这样,只需要在document上处理click事件即可; document.onclick = function(e){ e = e||window.event...('click',fn,false); ie6/7/8给出的方法是:ele.attachEvent('onclick',fn); 解决标准浏览器和低版本的IE方案如下: 事件绑定: function bind

6.6K30

js Event Loop 运行机制

Event Loop,事件环,线程进程。这些概念对初识前端的同学来说可能会一头雾水。而且运行js代码的运行环境除了浏览器还有node。因此不同环境处理Event Loop又变得不同,十分容易混淆。...浏览器中的进程和线程和Event Loop 浏览器的进程 从打开浏览器开始,打开浏览器,我们首先看到的是,用户界面,这里有搜索框,显示区,还有收藏夹等等。这些会分配一个进程。...js渲染引擎的Event Loop 以上线程,每个拿出来都可以详细的说上一篇。Event Loop涉及到的JS引擎的一些运行机制的分析。...js渲染引擎的Event Loop如下图 ?...node下Event Loop 事件环的整体还是不变的,执行栈,消息队列,api。不同的是,node下的消息队列有所不同 ?

1.6K40

js call()、apply()、bind()用法和区别

return num1 + num2; } const obj = {}; getSum.apply(obj, [1, 2]); // this指向: obj return: 3 3. bind...() 语法: fun.bind(thisArg,[arg1,arg2,…]) fun: 表示一个函数 thisArg: this要指向的对象,如果是null 和 undefined,则指向window全局对象...特性: fun.bind(thisArg,arg1,arg2,…) 不会立即调用fun函数,会返回一个新的指定了this的函数; bind方法将一个函数的对象上下文从初始的上下文改变为由 thisArg...(obj, 1, 2); // 返回的是一个新的指定了this的函数 newFun(); // 3 4. call()、apply()和bind()的应用 1. call() call 常用来继承,因为...() 如果我们想改变某个函数内部的this指向,但又不需要立即调用该函数,此时用bind: 点击 let

1.1K30

JS:事件循环机制(Event Loops)

** 事件循环,即 Event Loops。用于协调事件、用户交互、JavaScript 脚本、DOM 渲染、网络请求等等的执行顺序问题。...一个遵循 ECMAScript 标准的代理(浏览器或 JS 引擎)也必须遵循事件循环机制。 事件循环是由一个或以上的 **任务队列** 组成的。 3. **什么是任务队列?...由于 JavaScript 是 **单线程** 语言,所以在 JS 中所有的任务都需要排队执行,这些任务共同组成了 **任务队列** ,依次排队执行的过程,形成一个 **执行栈(Execution Context...to=https%3A%2F%2Fdeveloper.mozilla.org%2Fzh-CN%2Fdocs%2FWeb%2FAPI%2FWindow%2FsetImmediate)(Node.js 环境...to=https%3A%2F%2Fhtml.spec.whatwg.org%2Fmultipage%2Fwebappapis.html%23event-loops) * [并发模型与事件循环 - JavaScript

1.3K10

js中call、apply、bind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js中关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...(坑爹了,这好像在让巧媳妇去做无米之炊),不过没关系,call、apply、bind可以帮我们干这件事。...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、apply与bind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...67,5,7,6,-8,687);Math.min.apply(Math, arr);Math.min.call(Math, 34,5,3,6,54,6,-67,5,7,6,-8,687); 将伪数组转化为数组 js...Array.prototype.slice.call(arrayLike); 上面arr便是一个包含arrayLike元素的真正的数组啦( 注意数据结构必须是以数字为下标而且一定要有length属性 ) 数组追加 在js

1.7K50

手写JS函数的call、apply、bind

之所以要写这篇,是因为曾经面试被要求在白纸上手写bind实现  结果跟代码一样清晰明确,一阵懵逼,没写出来!  下面,撸起袖子就是干!~  把call、apply、bind一条龙都整一遍!...const _this = { name: 'YIYING' }// 参数为数组;方法立即执行fun.ownApply(_this, [1, 2])// 输出:YIYING3参考:前端手写面试题详细解答bind...定义与使用Function.prototype.bind(): developer.mozilla.org/zh-CN/docs/…// Function.prototype.bind()样例function...console.log(arg1 + arg2)}const _this = { name: 'YIYING' }// 只变更fun中的this指向,返回新function对象const newFun = fun.bind...(_this)newFun(1, 2)// 输出:YIYING3手写实现/** * 自定义bind实现 * @param context 上下文 * @returns {Function} */

1.2K20

手写JS函数的call、apply、bind

之所以要写这篇,是因为曾经面试被要求在白纸上手写bind实现  结果跟代码一样清晰明确,一阵懵逼,没写出来!  下面,撸起袖子就是干!~  把call、apply、bind一条龙都整一遍!...arg1 + arg2)}const _this = { name: 'YIYING' }// 参数为数组;方法立即执行fun.ownApply(_this, [1, 2])// 输出:YIYING3bind...定义与使用Function.prototype.bind(): developer.mozilla.org/zh-CN/docs/…// Function.prototype.bind()样例function...console.log(arg1 + arg2)}const _this = { name: 'YIYING' }// 只变更fun中的this指向,返回新function对象const newFun = fun.bind...(_this)newFun(1, 2)// 输出:YIYING3手写实现/** * 自定义bind实现 * @param context 上下文 * @returns {Function} */

1K30

js中call、apply、bind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js中关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...// 1 call person.showName.call(animal); // 2 apply person.showName.apply(animal); // 3 bind person.showName.bind...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、apply与bind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...8,687); Math.min.apply(Math, arr); Math.min.call(Math, 34,5,3,6,54,6,-67,5,7,6,-8,687); 将伪数组转化为数组 js...Array.prototype.slice.call(arrayLike); 上面arr便是一个包含arrayLike元素的真正的数组啦( 注意数据结构必须是以数字为下标而且一定要有length属性 ) 数组追加 在js

1.6K60

JS引擎的执行机制event loop

2.JS中的event loop(1) 3.JS中的event loop(2) 4.说说setTimeout 首先,请牢记2点: (1) JS是单线程语言 (2) JSEvent Loop是JS的执行机制...深入了解JS的执行,就等于深入了解JS里的event loop 1.灵魂三问 : JS为什么是单线程的? 为什么需要异步? 单线程又是如何实现异步的呢?...是通过的事件循环(event loop),理解了event loop机制,就理解了JS的执行机制 2.JS中的event loop(1) 例1,观察它的执行顺序 console.log(1)...所以,这里我们首先知道了JS里的一种分类方式,就是将任务分为: 同步任务和异步任务 图片描述 按照这种分类方式:JS的执行机制是 首先判断JS是同步还是异步,同步就进入主进程,异步就进入event table...重复以上2步骤,结合event loop(1) event loop(2) ,就是更为准确的JS执行机制了。

1.7K40

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券