javascript
文章平均质量分 90
鱼叔子
黑夜,留给我们想象的空间;白天,为之梦中幻想而奋斗。
展开
-
第十七篇《 基础数据类型,引用数据类型,区别?》
基础数据类型:Undfined,Null,Bollean,Number,String,Symbol引用类型:Object,Array,Date,RegExp,Function1、栈(stack)和堆(heap)stack为自动分配的内存空间,它由系统自动释放;而heap则是动态分配的内存,大小也不一定会自动释放2、数据类型JS分两种数据类型:基本数据类型:Number、String、Boolean、Null、 Undefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际原创 2021-12-09 20:42:20 · 118 阅读 · 0 评论 -
第十六篇《generator原理》
随着 Javascript 语言的发展,ES6 规范为我们带来了许多新的内容,其中生成器 Generators 是一项重要的特性。利用这一特性,我们可以简化迭代器的创建,更加令人兴奋的,是 Generators 允许我们在函数执行过程中暂停、并在将来某一时刻恢复执行。这一特性改变了以往函数必须执行完成才返回的特点,将这一特性应用到异步代码编写中,可以有效的简化异步方法的写法,同时避免陷入回调地狱。本文将对 Generators 进行简单介绍,然后结合笔者在 C#上的一点经验,重点探讨 Generators原创 2021-11-21 22:22:17 · 405 阅读 · 1 评论 -
第十五篇《promise原理》
这一次,彻底弄懂 Promise 原理Promise 必须为以下三种状态之一:等待态(Pending)、执行态(Fulfilled)和拒绝态(Rejected)。一旦Promise 被 resolve 或 reject,不能再迁移至其他任何状态(即状态 immutable)。基本过程:初始化 Promise 状态(pending)立即执行 Promise 中传入的 fn 函数,将Promise 内部 resolve、reject 函数作为参数传递给 fn ,按事件机制时机处理执行 then(…)原创 2021-11-21 22:21:59 · 109 阅读 · 0 评论 -
第十四篇《事件循环机制》
前言我们都知道,javascript从诞生之日起就是一门单线程的非阻塞的脚本语言。这是由其最初的用途来决定的:与浏览器交互。单线程意味着,javascript代码在执行的任何时候,都只有一个主线程来处理所有的任务。而非阻塞则是当代码需要进行一项异步任务(无法立刻返回结果,需要花一定时间才能返回的任务,如I/O事件)的时候,主线程会挂起(pending)这个任务,然后在异步任务返回结果的时候再根据一定规则去执行相应的回调。单线程是必要的,也是javascript这门语言的基石,原因之一在其原创 2021-11-21 22:21:39 · 107 阅读 · 0 评论 -
第十三篇《new操作符》
new一句话介绍 new:new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一也许有点难懂,我们在模拟 new 之前,先看看 new 实现了哪些功能。举个例子:// Otaku 御宅族,简称宅function Otaku (name, age) { this.name = name; this.age = age; this.habit = 'Games';}// 因为缺乏锻炼的缘故,身体强度让人担忧Otaku.prototype.原创 2021-11-21 22:21:10 · 61 阅读 · 0 评论 -
第十二篇《浮点数精度》
前言0.1 + 0.2 是否等于 0.3 作为一道经典的面试题,已经广外熟知,说起原因,大家能回答出这是浮点数精度问题导致,也能辩证的看待这并非是 ECMAScript 这门语言的问题,今天就是具体看一下背后的原因。数字类型ECMAScript 中的 Number 类型使用 IEEE754 标准来表示整数和浮点数值。所谓 IEEE754 标准,全称 IEEE 二进制浮点数算术标准,这个标准定义了表示浮点数的格式等内容。在 IEEE754 中,规定了四种表示浮点数值的方式:单精确度(32位)、双精确度原创 2021-11-21 22:20:19 · 160 阅读 · 0 评论 -
第十一篇《v8垃圾回收机制》
引言作为目前最流行的JavaScript引擎,V8引擎从出现的那一刻起便广泛受到人们的关注,我们知道,JavaScript可以高效地运行在浏览器和Nodejs这两大宿主环境中,也是因为背后有强大的V8引擎在为其保驾护航,甚至成就了Chrome在浏览器中的霸主地位。不得不说,V8引擎为了追求极致的性能和更好的用户体验,为我们做了太多太多,从原始的Full-codegen和Crankshaft编译器升级为Ignition解释器和TurboFan编译器的强强组合,到隐藏类,内联缓存和HotSpot热点代码收集等原创 2021-11-18 09:22:28 · 283 阅读 · 0 评论 -
第十篇《柯里化》
定义维基百科中对柯里化 (Currying) 的定义为:In mathematics and computer science, currying is the technique of translating the evaluation of a function that takes multiple arguments (or a tuple of arguments) into evaluating a sequence of functions, each with a single ar原创 2021-11-18 09:06:01 · 80 阅读 · 0 评论 -
第九篇《细说 call、apply 以及 bind 的区别和用法》
call 和 apply 的共同点它们的共同点是,都能够改变函数执行时的上下文,将一个对象的方法交给另一个对象来执行,并且是立即执行的。为何要改变执行上下文?举一个生活中的小例子:平时没时间做饭的我,周末想给孩子炖个腌笃鲜尝尝。但是没有适合的锅,而我又不想出去买。所以就问邻居借了一个锅来用,这样既达到了目的,又节省了开支,一举两得。改变执行上下文也是一样的,A 对象有一个方法,而 B 对象因为某种原因,也需要用到同样的方法,那么这时候我们是单独为 B 对象扩展一个方法呢,还是借用一下 A 对象的方法呢原创 2021-11-18 09:05:08 · 68 阅读 · 0 评论 -
第八篇《instanceof原理》
typeof 实现原理typeof 一般被用于判断一个变量的类型,我们可以利用 typeof 来判断number, string, object, boolean, function, undefined, symbol 这七种类型,这种判断能帮助我们搞定一些问题,比如在判断不是 object 类型的数据的时候,typeof能比较清楚的告诉我们具体是哪一类的类型。但是,很遗憾的一点是,typeof 在判断一个 object的数据的时候只能告诉我们这个数据是 object, 而不能细致的具体到是哪一种 ob原创 2021-11-18 09:04:15 · 162 阅读 · 0 评论 -
第七篇《立即执行函数》
也许你没有注意到,我是一个对于专业术语有一点强迫症的人。所以,当我多次听到流行却易产生误解的术语「自执行匿名函数」,我最终决定将我的想法写进这篇文章里。更进一步地说,除了提供关于该模式究竟是如何工作的全面信息,事实上我还建议了我们应该怎样称呼这种模式。另外,如果你想跳过这里,你可以直接跳到立即调用函数表达式进行阅读,但是我建议你读完整篇文章。请理解这篇文章不是想说「我对了,你错了」。我发自真心地想帮助人们理解看似复杂的概念,并且我认为使用前后一致的精确术语是有助于人们理解的最简单的方式之一。它是什么原创 2021-11-17 17:20:46 · 132 阅读 · 0 评论 -
第六篇《this的指向》
前言在《JavaScript深入之执行上下文栈》中讲到,当JavaScript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。对于每个执行上下文,都有三个重要属性变量对象(Variable object,VO)作用域链(Scope chain)this今天重点讲讲 this,然而不好讲。……因为我们要从 ECMASciript5 规范开始讲起。先奉上 ECMAScript 5.1 规范地址:英文版:http:/原创 2021-11-17 17:19:24 · 106 阅读 · 0 评论 -
第五篇《变量提升》
前言在上篇《JavaScript深入之执行上下文栈》中讲到,当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。对于每个执行上下文,都有三个重要属性:变量对象(Variable object,VO)作用域链(Scope chain)this今天重点讲讲创建变量对象的过程。变量对象变量对象是与执行上下文相关的数据作用域,存储了在上下文中定义的变量和函数声明。因为不同执行上下文下的变量对象稍有不原创 2021-11-17 17:17:34 · 91 阅读 · 0 评论 -
第四篇《闭包》
总有权访问另外一个函数作用域中的变量的函数。在函数返回后并不释放。为什么要用闭包?匿名自执行函数:避免临时变量加入到全局对象中1、影响访问速度,因为变量取值是需要从原型链上遍历的2、影响别的使用此变量名的函数结果缓存:在一个计算比较耗时的情况下,用闭包将计算结果缓存起来定义MDN 对闭包的定义为:闭包是指那些能够访问自由变量的函数。那什么是自由变量呢?自由变量是指在函数中使用的,但既不是函数参数也不是函数的局部变量的变量。由此,我们可以看出闭包共有两部分组成:闭包 =原创 2021-11-17 17:15:38 · 92 阅读 · 0 评论 -
第三篇《作用域》
前言在《JavaScript深入之执行上下文栈》中讲到,当JavaScript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。对于每个执行上下文,都有三个重要属性:变量对象(Variable object,VO)作用域链(Scope chain)this今天重点讲讲作用域链。作用域链在《JavaScript深入之变量对象》中讲到,当查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面原创 2021-11-17 17:14:02 · 92 阅读 · 0 评论 -
第二篇《继承》
写在前面本文讲解JavaScript各种继承方式和优缺点。但是注意:这篇文章更像是笔记,哎,再让我感叹一句:《JavaScript高级程序设计》写得真是太好了!1.原型链继承function Parent () { this.name = 'kevin';}Parent.prototype.getName = function () { console.log(this.name);}function Child () {}Child.prototype = n原创 2021-11-17 17:12:16 · 132 阅读 · 0 评论 -
第一篇《原型链》
prototype只有函数有prototype属性let a = {}let b = function () { }console.log(a.prototype) // undefinedconsole.log(b.prototype) // { constructor: function(){...} }Object.prototype怎么解释?其实Object是一个全局对象,也是一个构造函数,以及其他基本类型的全局对象也都是构造函数:function outTypeName(data原创 2021-11-17 17:10:16 · 299 阅读 · 0 评论