循环/闭包/setTimeout/Promise 综合】的更多相关文章

控制台显示内容为? for (var i = 0; i < 5; i++) { console.log(i); } 控制台显示内容为? for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000 * i); } 控制台显示内容为? for (var i = 0; i < 5; i++) { (function(i) { setTimeout(function() { console.log(i…
我在上一篇闭包的文章中留下了一个关于setTimeout与循环闭包的思考题. 利用闭包,修改下面的代码,让循环输出的结果依次为1, 2, 3, 4, 5 for (var i = 1; i <= 5; i++) { setTimeout(function timer() { console.log(i); }, i * 1000); } 下面是一些朋友看了闭包以后给出了的一些题,他们在看了上一篇文章以后也对闭包比较感兴趣 所以我也借助此文章对setTimeout进行一个相关的知识分享,希望大家阅…
什么是事件循环?想要了解什么是事件循环就要从js的工作原理开始说起: JS主要的特点就是单线程,所谓单线程就是进程中只有一个线程在运行. 为什么JS是单线程的而不是多线程的呢? JS的主要用途就是与用户交互,操作DOM,假设JS同时有两个线程,一个线程中在某个DOM节点上添加或者修改内容,而另一个线程在这个DOM节点上执行删除该节点操作,这样就会产生冲突. 单线程就意味着所有任务都需要排队,前一任务结束,才会执行后一个任务,当是如果当遇到前一个任务耗时很长的情况,后一个任务就不得不一直等着.因此…
聊聊同步.异步和回调 同步,异步,回调,我们傻傻分不清楚, 有一天,你找到公司刚来的程序员小T,跟他说:“我们要加个需求,你放下手里的事情优先支持,我会一直等你做完再离开”.小T微笑着答应了,眼角却滑过一丝不易觉察的杀意. 世界上的所有事情大致可以分为同步去做和异步去做两种.你打电话去订酒店,电话另一边的工作人员需要查下他们的管理系统才能告诉你有没有房间. 这时候你有两种选择:一种是不挂电话一直等待,直到工作人员查到为止(可能几分钟也可能几个小时,取决于他们的办事效率),这就是同步的. 另一种是…
聊聊同步.异步和回调 同步,异步,回调,我们傻傻分不清楚, 有一天,你找到公司刚来的程序员小T,跟他说:“我们要加个需求,你放下手里的事情优先支持,我会一直等你做完再离开”.小T微笑着答应了,眼角却滑过一丝不易觉察的杀意. 世界上的所有事情大致可以分为同步去做和异步去做两种.你打电话去订酒店,电话另一边的工作人员需要查下他们的管理系统才能告诉你有没有房间. 这时候你有两种选择:一种是不挂电话一直等待,直到工作人员查到为止(可能几分钟也可能几个小时,取决于他们的办事效率),这就是同步的. 另一种是…
最近在看<Node.js调试指南>的时候遇到有意思的几道题,是关于setTimeout, promise.then, process.nextTick, setImmediate的执行顺序.今天抽空记录下这道题的分析过程及背后的原理与知识点. 题目如下: // 题目一: setTimeout(()=>{ console.log('setTimeout') },0) setImmediate(()=>{ console.log('setImmediate') }) // 题目二: c…
今天看到这样一道面试题: //请写出输出内容 async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } async function async2() { console.log('async2'); } console.log('script start'); setTimeout(function() { console.log('setTimeout…
2412: 帮警长数一数[循环.分支简单综合] 时间限制: 1 Sec  内存限制: 64 MB 提交: 323  解决: 169 题目描述 黑猫警长在犯罪现场发现了一些血迹,现已经委托检验机构确定了血型,需要统计各种血型的样本数目. 输入 血型序列(A/B/O/C,C代表AB型血,输入以X结束) 输出 各种血型的数量 样例输入 ABCAOCOAOOBX 样例输出 A:3 B:2 O:4 AB:2 迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方-- #include <std…
对于for循环的闭包问题的理解,认为需要理解函数中的变量的作用域链的概念 另外提及下变量提升的概念 如下例子: var ar = [];for(var i=1:i<10; i++){ ar[i] = function(){ console.log(i); }} ar[5]       // 打印为10:因为有闭包函数的问题 理解好闭包,应该理解好函数中变量的作用域概念. 首先,函数是有自己的执行环境(context)概念,函数的变量,就有变量作用域链.函数中,可以声明自己的局部变量,函数外是访问…
一个简单的例子,如果想循环输出数组中的每一个数值我们可以利用for循环来输出例如: <script type="text/javascript"> var arr=["a","b","c","d","e"]; for (var i=0;i<arr.length;i++){ document.write(arr[i]); } </script> 这是最常见不过…
class Person { async getVersion () { return new Promise((resolve, reject) => { setTimeout(function () { resolve('1.0'); // reject('fail') }, 1000); }) } } const start = async () => { var p = new Person(); const data = await p.getVersion(); console.l…
今天下午看了好多关于这些执行顺序的问题  经过自己的实践 终于理解了  记录一下就拿网上出现频繁的代码来说: async function async1() { console.log('async1 start'); await async2(); console.log('asnyc1 end'); } async function async2() { console.log('async2'); } console.log('script start'); setTimeout(() =…
个网友问了个问题,如下的html,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5. <html > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>闭包演示</title> <script type="text/javascript"…
提出问题,问题代码为 setTimeout(function(){console.log(1)},0); new Promise(function(resolve){ console.log(2) for( var i=0 ; i<100 ; i++ ){ i==99 && resolve() } console.log(3) }).then(function(){ console.log(4) }); console.log(5); 在控制台运行其结果为: 疑问:既然promise…
掘金上看到一个setTimeout与循环闭包的思考题.拿过来看了下,一方面了解settimeout的运行机制,还有就是js闭包的特性.关于闭包,有如下解释: 在这里写一点我对闭包的理解.理解闭包的关键在于:外部函数调用之后其变量对象本应该被销毁,但闭包的存在使我们仍然可以访问外部函数的变量对象. function outer() { var a = 1; return function() { return a; }; } var b = outer(); console.log(b()); /…
我在详细图解作用域链与闭包一文中的结尾留下了一个关于setTimeout与循环闭包的思考题. 利用闭包,修改下面的代码,让循环输出的结果依次为1, 2, 3, 4, 5 for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log(i); }, i*1000 ); } 值得高兴的是很多朋友在读了文章之后确实对闭包有了更加深刻的了解,并准确的给出了几种写法.一些朋友能够认真的阅读我的文章并且一个例子一个例子的上手练习,这…
之前翻看别的大佬的博客看到了关于setTimeout,promise还有async执行顺序的文章.观看了几篇之后还是没有怎么看懂,于是自己开始分析代码,并整理了此文章,我相信通过此文章朋友们能对异步同步还有,setTimeout,Promise,async这些内容了然于胸,接下来让我们走入正题: 这是别的大佬博客里面的代码: async function async1() { console.log('async1 start') await async2() console.log('asyn…
用过 Promise,但是总是有点似懂非懂的感觉,也看过很多文章,还是搞不懂 Promise的 实现原理,后面自己边看文章,边调试代码,终于慢慢的有感觉了,下面就按自己的理解来实现一个 Promise. 已将每一步的代码都放在了 github 上,方便大家阅读.如果觉得好的话,欢迎star. 想要完全理解代码,需要理解 this 和闭包的含义. Promise是什么 简单来说,Promise 主要就是为了解决异步回调的问题.用 Promise 来处理异步回调使得代码层次清晰,便于理解,且更加容易…
一.闭包 JavaScript中允许嵌套函数,允许函数用作数据(可以把函数赋值给变量,存储在对象属性中,存储在数组元素中),并且使用词法作用域,这些因素相互交互,创造了惊人的,强大的闭包效果.[update20170501] 闭包就是指有权访问 另一个函数作用域 中的变量 的函数 !!! 好处:灵活方便,可封装 缺点:空间浪费.内存泄露.性能消耗 由于闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存.过度使用闭包可能会导致内存占用过多,建议只在绝对必要时再考虑使用闭包.虽然像V8等…
之前在网上看了很多关于setTimeout的文章,但我感觉都只是点到为止,并没有较深入的去剖析,也可能是我脑袋瓜笨,不容易被点解.后面看了<你不知道的javascript-上卷>一书,决定重新再来理一次.这次我觉得我应该整明白了.于是分享给大家,文中解释有错误的部分还希望大家留言指正. 首先我们还是来看那道大家再熟悉不过的前端面试题: for (var i = 1;i <= 5;i ++) { setTimeout(function timer() { console.log(i) },…
之前在网上看了很多关于setTimeout的文章,但我感觉都只是点到为止,并没有较深入的去剖析,也可能是我脑袋瓜笨,不容易被点解.后面看了<你不知道的javascript-上卷>一书,决定重新再来理一次.这次我觉得我应该整明白了.于是分享给大家,文中解释有错误的部分还希望大家留言指正. 首先我们还是来看那道大家再熟悉不过的前端面试题: for (var i = 1;i <= 5;i ++) { setTimeout(function timer() { console.log(i) },…
来看看通过阅读本篇文章要点: Promise的几道基础题 Promise结合setTimeout Promise中的then.catch.finally Promise中的all和race async/await的几道题 async处理错误 综合题 几道大厂的面试题 前期准备 在做下面的题目之前,我希望你能清楚几个知识点. (如果你感觉一上来不想看这些列举的知识点的话,直接看后面的例子再来理解它们也可以) event loop它的执行顺序: 一开始整个脚本作为一个宏任务执行 执行过程中同步代码直…
闭包在javascript来说是比较重要的概念,平时工作中也是用的比较多的一项技术.下来对其进行一个小小的总结 什么是闭包? 官方说法: 闭包是指有权访问另一个函数作用域中的变量的函数.创建闭包的常见方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量------<javascript高级程序设计第三版> 下面就是一个简单的闭包: function A(){ var text="hello world"; function B(){ console.…
昨天晚上听别人谈起闭包这个东西,虽然对js有一点了解但却丝毫没有印象,今天也没什么事就顺便研究了一下满足好奇宝宝.整合于网上的理解,记录一下. 一.闭包的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 全局作用域 局部作用域 :一个 function 形成一个独立的作用域, 而且方法作用域还能够嵌套. 与别的语言不同的是: 花括号({})不能形成一个独立的作用域, 例如Java中的作用域. 下面我们举例说说作用域 var m = 1; function f(){ //这里…
上一篇文章中,我们介绍了Promise的基本使用,在这篇文章中,我们试着自己来写一个Promise,主要是学习Promise的内部机制,学习它的编程思想. !!!备注:本文写的不好,仅供自己学习之用,具体的实现过程建议看下面的参考文章.所以本文没有发布到博客园首页和其他地方 Promise API分析 正常使用方法 我们来看一个正常的使用: var p=new Promise(function(resolve,rejcet){ setTimeout(function(){ if(true){ r…
闭包定义 当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行. 看一段最简单的闭包代码: function foo() { var a = 2; //闭包 function bar() { console.log(a); } return bar; } //理论上 foo执行完内部数据会被销毁 //由于闭包的作用 作用域一直保持 var baz = foo(); baz(); bar()函数可以访问foo()的作用域,通过foo()执行后,返回bar()并当…
老实说,写这篇文章的时候心里是有点压抑的,因为受到打击了,为什么?就 因为喜欢折腾不小心看到了这个"简单"的函数:        for (var i = 0; i < 5; i++) {             setTimeout(function () {                 console.log(i)             }, i * 1000);         }         console.log(i); 什么?这不就是我很久之前看到的先打印一…
作用域与闭包 什么是作用域 编译器 理解作用域 嵌套的作用域 词法作用域 词法分析时 欺骗词法作用域 函数与块作用域 函数中的作用域 隐藏标识符于普通作用域 函数作为作用域 块作为作用域 提升 先有鸡还是先有蛋? 编译器再次袭来 函数优先 作用域闭包 启蒙 事实真相 循环 + 闭包 模块 什么是作用域 作用域是一组定义在何处储存变量以及如何访问变量的规则. 编译器 javascript 是编译型语言.但是与传统编译型语言不同,它是边编译边执行的.编译型语言一般从源码到执行会经历三个步骤: 分词/…
1. 只有一个主线程,node开始执行脚本时,会先进事件循环初始化(同步任务,发出异步请求,规划定时器生效时间,执行promise.nextTick等),这是事件循环还未开始. 2. nodejs每一轮事件循环的六个阶段(事件循环会无限次执行,直到异步任务的回调函数队列清空才会停止执行): timers(处理setTimeout和setInterval的回调函数) I/O callbacks(除了setTimeout.setInterval.setImmediate.用于关闭请求的回调函数) i…
原文:你不知道的js系列 一个简单粗暴的定义 闭包就是即使一个函数在它所在的词法作用域外部被执行,这个函数依然可以访问这个作用域. 比如: function foo() { var a = 2; function bar() { console.log( a ); } bar(); } foo(); 这个代码和我们讨论嵌套作用域时一样,函数 bar() 可以访问外部作用域中的变量 a(RHS 查询) 这是 “闭包” 吗?……不完全是.这只是解释了对 a 的引用是通过词法作用域的查询规则,这些规则…