javaScript理论
TianBL2017
做一个能解决问题的人
展开
-
阮一峰《jQuery的deferred对象详解》读书笔记
1.jquery和angular都有defer;2.简单说,deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行,即此函数为未来执行。3.它解决了如何处理耗时操作的问题,对那些操作提供了更好的控制,以及统一的编程接口。4.deferred对象的最大优点,就是它把这一套回调函数接口...原创 2020-01-01 18:08:53 · 223 阅读 · 0 评论 -
JavaScript的任务和事件循环->宏任务和微任务(0)
宏任务和微任务对于初学者,事件循环不仅仅包含事件队列,而是具有至少两个队列。除了事件,还要保持浏览器执行的其它操作,这些操作被称为任务。任务被分为两类,宏任务和微任务。宏任务包括:创建主文档对象,解析html,执行主线(全局)js,更改当前url以及各种事件,如页面加载,输入,网络事件和定时器事件。宏任务代表一个个离散的,独立的工作单元。运行完任务后,浏览器可以继续其它调度,如...原创 2019-11-13 23:20:47 · 129 阅读 · 0 评论 -
每日知识积累->js性能分析
我们使用如下的代码来收集性能信息:console.time("my operation");//开始计时器//执行多次操作for(var i=0;i<1000000;i++){ console.log(i);}console.timeEnd("my operation");//停止计时器把要测量的代码放在两个计时器调用之间,分别使用内置console对象上的time...原创 2019-11-12 21:19:28 · 154 阅读 · 0 评论 -
《你不知道的JavaScript》(上卷)读书笔记:this全面解析(2)
new 绑定在传统的面向类的语言中,“构造函数”是类中的一些特殊方法,使用new初始化类时回调用类的构造函数;js也有一个new操作符,使用方法看起来和那些面向类的语言一样,然而,js中的new的机制实际上和面向类的语言完全不同。首先,我们重新定义一下js中的构造函数,在js中,构造函数只是一种使用new操作符时被调用的函数。它们并不属于某个类,也不实例化一个类,举例说明:思考...原创 2019-10-23 10:20:43 · 183 阅读 · 1 评论 -
《你不知道的JavaScript》(上卷)读书笔记:this全面解析(1)
显式绑定如果我们不想像隐式绑定一样,在一个对象内部包含一个函数引用,而是像在某个对象上强制调用函数,需要怎么做呢?js中“所有”函数都有一些有用的特性(这和它们的[[Prototype]])有关,可以被用于解决这个问题:具体来说,可以使用函数的call和apply方法。这两个方法的第一个参数是一个对象,是给this准备的,接着在调用函数时将其绑定到this。因为可以直接指定this...原创 2019-10-22 16:55:10 · 125 阅读 · 0 评论 -
《你不知道的JavaScript》(上卷)读书笔记:this全面解析(0)
调用位置理解调用位置:调用位置就是函数在代码中被调用的位置(而不是声明的位置);只有仔细分析调用位置才能回答这个问题:这个this到底引用的是什么?寻找调用位置最重要是要分析调用栈。绑定规则我们需要根据调用位置,来确定所采用的规则!默认绑定:最常用的函数调用类型,默认调用,这条规则是无法应用其它规则时的默认规则。看一段最简单的代码:var a=1; f...原创 2019-10-21 22:09:57 · 163 阅读 · 0 评论 -
Tasks, microtasks, queues and schedules
发现一篇关于js事件循环机制的好文,推荐如下:https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/转载 2019-10-13 22:06:59 · 116 阅读 · 0 评论 -
多个setTimeout顺序执行结果的困惑记录
看一段代码:for(var i=1;i<=5;i++){ (function(){ var j=i; setTimeout(function timer(){ console.log(j); },j*1000); })(); }for(var i=1;i<=5;i++){ (function(j){ se...原创 2019-10-13 16:27:28 · 3304 阅读 · 1 评论 -
《你不知道的JavaScript》(上卷)读书笔记:作用域和闭包1.6->闭包->No.2
看一段代码:var a=2;(function IIFE(){console.log(a);})();虽然这段代码可以正常工作,但是它严格来讲并不是闭包。因为函数IIFE并不是在它本身的词法作用域以外执行的。它在定义时所在的作用域中执行,实际效果与下段代码相同:function IIFE2(){console.log(a);};IIFE2();a是通过普通的词法...原创 2019-10-11 16:54:31 · 165 阅读 · 0 评论 -
《你不知道的JavaScript》(上卷)读书笔记:作用域和闭包1.6->闭包->No.1
无论使用何种方式,对函数类型的值进行传递,当函数在别处调用时都可以观察到闭包。在js里面,函数可以像其他类型一样,作为函数的参数进行传递!我们类比一下C语言,实现类似的功能依赖的是函数指针,在js中,我们虽然传递的是函数名,但实质应该也是指向函数体所在起始位置的指针(猜测js引擎会有一个map以存储变量名和其首地址)。我们看一下下面的代码的执行过程:我们看一下执行栈,foo调用...原创 2019-10-10 20:49:51 · 110 阅读 · 0 评论 -
《你不知道的JavaScript》(上卷)读书笔记:作用域和闭包1.5
提升函数作用域和块作用域的行为是一样的,可以总结为:任何声明在某个作用域内的变量,都将附属于这个作用域。但是,作用域同其中的变量声明出现的位置有某种微秒的联系。“先有鸡还是现有蛋”直觉上认为,js代码在执行时是由上到下一行一行执行的,但是实际上并不完全正确。典型代码如下所示: a=2; var a; console.log(a);//2这段代码的运行...原创 2019-10-08 21:17:50 · 126 阅读 · 0 评论 -
js实现金额的中文大写
要求:输入金额数字,输出它的中文大写形式(如输入1000则输出一千元整);//代码不包括校验输入合法部分transform(number) { var judge = false; //判断是否为整数 var judgedivide = false;//判断是否被10整除 var transformNumber = number.t原创 2018-01-30 13:49:02 · 474 阅读 · 0 评论 -
《高性能javaScript》一书中的一处错误
请看书中第158页,“使用位运算代替数学操作”中举例的两段代码: 我们看第一段代码的逻辑,如果i对2取余数不为0即i为奇数的时候,className是“even”,否则是“odd”,第二段的代码逻辑是如果i与i为1即i为奇数时,className是“odd”,否则是“even”,这两段代码的逻辑正好是相反的,因此不能简单的说“上面的代码可以重写如下”。 ...原创 2018-10-19 11:32:34 · 125 阅读 · 0 评论 -
《JavaScript高级程序设计》(第三版)的一处错误
《JavaScript高级程序设计》(第三版),第61页请注意开始的if结构语句,它采用的是双等号"=="但是case语句判断与三等号的if语句等效,因此,更加准确的写法是把开头的if语句中的判断结构从双等号变成三等号...原创 2018-10-19 14:05:10 · 268 阅读 · 0 评论 -
《你不知道的JavaScript》笔记异步:现在与将来(0)
如何表达和控制持续一段时间的程序行为?指的是程序的一部分现在运行,另一部分将来运行,而另一部分在将来运行;现在和将来之间有段间隙,在这段间隙中,程序没有活跃执行。[很像操作系统,等待用户输入]此时,可能在等待用户输入,从数据库或文件系统请求数据,通过网络发送数据并等待响应,或者是以固定时间间隔执行重复任务(动画)。在诸如此类的场景中,程序需要管理这段时间间隙的状态。程序现...原创 2019-08-27 22:44:17 · 140 阅读 · 0 评论 -
《你不知道的JavaScript》(上卷)读书笔记:作用域和闭包1.1
0.作用域是什么?1.存储和访问变量的值的能力将状态带给了程序。2.需要一套设计良好的规则来存储变量,并且之后可以方便的找到这些变量,这套规则称为作用域。最初个人的理解作用域是“势力范围”,看来还是粗浅了一些,对“势力范围”进行抽象即变量存储和访问的规则。1.编译原理1.尽管通常将JavaScript归类为“动态”或者“解释执行”的语言,但事实上它是一门编译语言。但是与传统的编...原创 2019-09-26 21:20:03 · 149 阅读 · 0 评论 -
《你不知道的JavaScript》(上卷)读书笔记:作用域和闭包1.2
理解作用域承上文,目前出现了三个概念:1.引擎:从头到尾负责整个JavaScript程序的编译及执行过程个人感觉就像CPU里面的控制单元2.编译器:引擎的好朋友之一,负责语法分析以及代码生成等脏话类活个人感觉就像CPU里面的ALU3.作用域:引擎的好朋友之一,负责收集维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访...原创 2019-09-26 23:30:05 · 152 阅读 · 0 评论 -
《你不知道的JavaScript》(上卷)读书笔记:作用域和闭包1.3
词法作用域作用域共有两种主要的工作模型。第一种是最为普遍的,被大多数编程语言所采用的词法作用域,另一种叫作动态作用域,仍有一些编程语言在使用(比如 bash,perl中的一些模式等)。大部分标准语言编译器的第一个工作阶段叫词法化(也叫单词化)。简单的说,词法作用域就是定义在词法阶段的作用域,换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的,因此当词法分析器处理代码时...原创 2019-10-06 21:06:48 · 144 阅读 · 0 评论 -
《你不知道的JavaScript》(上卷)读书笔记:作用域和闭包1.4
函数作用域和块作用域作用域包含了一些“容器”,其中包含了标识符(变量,函数)的定义,这些容器互相嵌套并整齐排列成蜂窝状,排列的结构是在写代码时定义的。但是,究竟是什么生成了一个新的容器?只有函数可以吗?JavaScript中的其它结构能生成容器吗?对于此问题,最常见的答案是JavaScript具有基于函数的作用域,意味着每声明一个函数都会为其自身创建一个容器,而其它结构都不会创建作用域...原创 2019-10-07 18:23:42 · 225 阅读 · 0 评论 -
浅谈javascript中的变量、执行环境和作用域
JavaScript诞生于1995年,当时的主要用途是处理一些输入验证操作,今天,javaScript已经演进为一门功能全面的编程语言,能够处理复杂的计算机交互,同时它也是jquery,ajax,Angularjs,ionic等技术的基础。现结合对教材理论的思考及编程实践,对javascript的变量,执行环境和作用域问题论述一些自身的体会请同行前辈不吝批评指正。JavaScript变量可原创 2017-03-22 14:16:56 · 361 阅读 · 0 评论