JavaScript
文章平均质量分 85
natsu-cc
起床搬砖啦~
展开
-
JavaScript-内存泄漏
前言:原创 2021-05-27 21:59:22 · 1113 阅读 · 2 评论 -
JavaScript-Generators
前言:随着 Javascript 语言的发展,ES6 规范为我们带来了许多新的内容,其中生成器 Generators 是一项重要的特性。利用这一特性,我们可以简化迭代器的创建,更加令人兴奋的,是 Generators 允许我们在函数执行过程中暂停、并在将来某一时刻恢复执行。这一特性改变了以往函数必须执行完成才返回的特点,将这一特性应用到异步代码编写中,可以有效的简化异步方法的写法,同时避免陷入回调地狱。简单介绍:传统的编程语言,早有异步编程的解决方案(其实是多任务的解决方案)。其中有一种叫做"协原创 2021-04-23 17:33:25 · 214 阅读 · 0 评论 -
JavaScript-Promise
前言:在异步编程中,Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值,扮演了举足轻重的角色,比传统的解决方案(回调函数和事件)更合理和更强大。一个 Promise 对象代表一个在这个 promise 被创建出来时不一定已知的值。它让您能够把异步操作最终的成功返回值或者失败原因和相应的处理程序关联起来。 这样使得异步方法可以像同步方法那样返回值:异步方法并不会立即返回最终的值,而是会返回一个 promise,以便在未来某个时候把值交给使用者。Promise 基本结构:ne原创 2021-04-21 00:03:08 · 136 阅读 · 1 评论 -
JavaScript-事件循环机制
前言:javascript是一门单线程的非阻塞的脚本语言。单线程意味着,javascript代码在执行的任何时候,都只有一个主线程来处理所有的任务。而非阻塞则是当代码需要进行一项异步任务(无法立刻返回结果,需要花一定时间才能返回的任务,如I/O事件)的时候,主线程会挂起(pending)这个任务,然后在异步任务返回结果的时候再根据一定规则去执行相应的回调。单线程是必要的,也是javascript这门语言的基石,原因之一在其最初也是最主要的执行环境——浏览器中,我们需要进行各种各样的dom操作。如果原创 2021-04-18 23:22:28 · 156 阅读 · 0 评论 -
JavaScript-new操作符
前言:new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 --MDN举个例子:function Car(color) { this.color = color;}Car.prototype.start = function() { console.log(this.color + " car start");}var car = new Car("black");car.color; // 访问构造函数里的属性// blackcar.st原创 2021-04-16 23:13:44 · 116 阅读 · 0 评论 -
JavaScript-浮点数精度
前言:对于 JavaScript 开发者来说,或多或少都遇到过 js 在处理数字上的奇怪现象,比如:0.1 + 0.2 是否等于 0.3 作为一道经典的面试题,已经广外熟知,说起原因,大家能回答出这是浮点数精度问题导致。0.1 + 0.2 = 0.300000000000000040.1 + 1 - 1 = 0.100000000000000090.1 * 0.2 = 0.020000000000000004Math.pow(2, 53) = 9007199254740992Math.pow原创 2021-04-15 00:18:19 · 360 阅读 · 2 评论 -
JavaScript-V8引擎的垃圾回收
前言:我们知道,JavaScript之所以能在浏览器环境和NodeJS环境运行,都是因为有V8引擎在幕后保驾护航。从编译、内存分配、运行以及垃圾回收等整个过程,都离不开它。本篇主要是从V8引擎的垃圾回收机制入手,讲解一下在JavaScript代码执行的整个生命周期中V8引擎是采取怎样的垃圾回收策略来减少内存占比的。对这方面有一定的了解之后,能增强我们在写代码过程中对减少内存占用,避免内存泄漏的主观意识,也许能够帮助你写出更加健壮和对V8引擎更加友好的代码。为什么要有垃圾回收:在V8引擎逐行执行原创 2021-04-15 00:17:51 · 274 阅读 · 0 评论 -
JavaScript-函数柯里化
前言:柯里化(英语:Currying),又称为部分求值,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回一个新的函数的技术,新函数接受余下参数并返回运算结果。接收单一参数,因为要携带不少信息,因此常常以回调函数的理由来解决。将部分参数通过回调函数等方式传入函数中返回一个新函数,用于处理所有的想要传入的参数柯里化,是函数式编程的一个重要概念。它既能减少代码冗余,也能增加可读性。补充知识点之函数的隐式转换:JavaScript作为一种弱类型语言,它的隐式原创 2021-04-09 00:22:54 · 153 阅读 · 0 评论 -
JavaScript-call & apply
前言:每个函数都包含两个非继承而来的方法:call()和apply();在JavaScript中,call和apply作用是一样的,都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部this的指向。call 和 apply 的共同点:它们的共同点是,都能够改变函数执行时的上下文,将一个对象的方法交给另一个对象来执行,并且是立即执行的。改变执行上下文也是一样的,A 对象有一个方法,而 B 对象因为某种原因,也需要用到同样的方法,那么这时候我们是单独为原创 2021-04-08 21:41:58 · 314 阅读 · 1 评论 -
JavaScript-bind
前言:bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。(MDN)特点:返回一个新函数可传入参数简言之,bind是用来改变函数的this对象的指向的。返回函数的模拟实现:var foo = { name: 'natsu'};function bar() { return this.name;}var bindFoo = bar.bind(foo原创 2021-04-07 23:25:46 · 120 阅读 · 1 评论 -
JavaScript-typeof & instanceof
前言:typeof 和 instanceof 都是用来判断变量类型的。typeof:typeof 操作符返回一个字符串,表示未经计算的操作数的类型。一般被用于判断一个变量的类型,我们可以利用 typeof 来判断number, string, object, boolean, function, undefined, symbol 这七种类型。// 数值typeof 37 === 'number';typeof 3.14 === 'number';typeof(42) === 'num原创 2021-03-31 21:58:48 · 185 阅读 · 0 评论 -
JavaScript-this
前言:当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。对于每个执行上下文,都有三个重要属性:变量对象(Variable object,VO)作用域链(Scope chain)thisTypes:ECMAScript 的类型分为语言类型和规范类型。ECMAScript 语言类型是开发者直接使用 ECMAScript 可以操作的。其实就是我们常说的Undefined, Null, Boo原创 2021-03-31 21:52:08 · 181 阅读 · 0 评论 -
JavaScript-立即执行函数
前言:在 JavaScript 里,每个函数,当被调用时,都会创建一个新的执行上下文。因为在函数里定义的变量和函数是唯一在内部被访问的变量,而不是在外部被访问的变量,当调用函数时,函数提供的上下文提供了一个非常简单的方法创建私有变量。function makeCounter() { var i = 0; return function(){ console.log(++i); }; }//记住:`counter`和`counter2`都有他们自己的变量原创 2021-03-31 21:51:42 · 132 阅读 · 0 评论 -
JavaScript-变量
前言当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。对于每个执行上下文,都有三个重要属性:变量对象(Variable object,VO)作用域链(Scope chain)this变量对象变量对象是与执行上下文相关的数据作用域,存储了在上下文中定义的变量和函数声明。全局上下文我们先了解一个概念,叫全局对象。全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性原创 2021-03-31 21:51:20 · 107 阅读 · 0 评论 -
JavaScript-闭包
前言要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量和局部变量。Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量;另一方面,在函数外部自然无法读取函数内的局部变量。定义:各种专业文献上的"闭包"(closure)定义非常抽象,很难看懂。简单来说,闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。MDN定义:原创 2021-03-31 21:50:52 · 125 阅读 · 0 评论 -
JavaScript-作用域
前言:理解作用域链之前先了解下作用域:作用域(Scope)是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。通俗的说,当查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面上的父级)执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。这样由多个执行上下文的变量对象构成的链表就叫做作用域链。...原创 2021-03-31 21:50:25 · 146 阅读 · 0 评论 -
JavaScript-继承
前言:大部分面向对象的编程语言,都是通过“类”(class)实现对象的继承。传统上,JavaScript 没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承。继承的本质就是复制,即重写原型对象,代之以一个新类型的实例。原型链继承基本思想:利用原型让一个引用类型继承另外一个引用类型的属性和方法。构造函数、原型和实例之间的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向原创 2021-03-27 12:53:21 · 116 阅读 · 1 评论 -
JavaScript-原型链
原型链概念:原型链是一种机制,指的是JavaScript每个对象包括原型对象都有一个内置的__proto__属性(是从构造函数的prototype属性派生的)指向创建它的函数对象的原型对象,即prototype属性。在对象实例和它的构造器之间建立一个链接,之后通过上溯原型链,在构造器中找到这些属性和方法原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。作用:原型链原创 2021-03-26 23:50:45 · 230 阅读 · 0 评论