最新文章

【转】为什么 Web 前端语言只有 JavaScript?前端认知

本文核心观点是「一门程序语言脱离实际的硬件环境和相应的软件环境谈它的发展变化,谈为什么我们最后选择它往往是不够深刻的」。我尝试从非另一个角度看待问题。 这个话题很大,但确实值得 Web 从业者去深究和探讨!但这是一个很有难度的问题,到目前为止我还看不到一个让人心锐诚服的答案!在我看来,找到相对合情合理的答案得从计算机硬件(尤其是 CPU)开始,从操作系统发展变化的角度审视互联网的进化,这样才更容易…

【转】为什么 Web 前端语言只有 JavaScript?

8/5/202051 分钟阅读310

Promise 与 for 循环的几个题JavaScript

Promise 和 for 循环问题,循环需要上一次的结果 需要计算工序的时间,有开始时间,结束时间,下一道工序的开始的时间是上一道工序的结束时间,使用 promise 和 遍历实现 for 循环中的 promise 如何正确的 resolve promise 是异步的,需要到下一个 tick 才能执行 then,除非 break 或者 return,否则就是等 for 循环执行完毕才能 reso…

Promise 与 for 循环的几个题

12/4/20192 分钟阅读380

理解 js 的微任务(microtask)与宏任务(microtask)JavaScript

js 的特点 单线程 执行机制是基于 event loop 所有同步任务再主线程执行,形成执行栈 主线程之外有一个任务队列,只要一步任务有了运行结果,就在任务队列中放置一个事件 一旦执行栈的同步执行完毕,就去读取任务队列,寻找任务队列中放置的异步事件,异步事件结束等待状态,进入执行栈,开始执行 之前有写了一篇文章 js 引擎执行过程:运行机制,语法分析,创建函数调用栈,创建上下文,创建作用域链 ,…

理解 js 的微任务(microtask)与宏任务(microtask)

6/15/20193 分钟阅读470

理解 js 中的双精度浮点数的原因、原理和解决方法JavaScript

业务中常见的问题 原因和原理 js 所有的数字都遵循 IEE 754 标准,使用 64 位固定长度表示,这就是双精度浮点数的由来 这样做的目的是为了归一化处理数字,节省存储空间 64 位分为三部分 符号位(S):第 1 位符号位,0 代表正数,1 代表负数 指数为(E):中间 11 位指数位,代表次方数 位数位(M):最后 52 位是位数,超出的部分自动进 1 舍 0 转换公式 辅助工具: 十进制…

理解 js 中的双精度浮点数的原因、原理和解决方法

6/7/20194 分钟阅读490

TypeScript 基础TypeScript

原始数据类型在 typescript 的应用 原始数据类型包括:布尔值、数值、字符串、null、undefined 任意值在 typescript 的应用 任意值(Any)用来表示允许赋值为任意类型 类型推论 TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论 联合类型 表示取值可以为多种类型中的一种 对象类型 使用接口(Interfaces)来定义对象的类型 数组类…

TypeScript 基础

5/20/20196 分钟阅读380

js 设计模式-发布订阅模式(观察者模式)JavaScript

如果对 apply 的使用不太自信,可以看这篇文章 apply 、 call 、bind 三者的区别 什么是发布订阅模式(观察者模式) 订阅者可监听发布者发布的消息,一旦发布者有消息发布,那么订阅者就可以接收到消息,当然订阅者也可选择性订阅 发布订阅模式(观察者模式)实现条件 确定发布者 确定缓存列表(用于存储订阅者) 发布消息(接收消息) 最常见的发布订阅模式(观察者模式) dom 监听事件 发…

js 设计模式-发布订阅模式(观察者模式)

5/19/20192 分钟阅读350

理解 js 模块规范:CommonJS、AMD、CMD、UMD 和 ES6 moduleJavaScript

CommonJS 服务端模块规范,ES5 的 Nodejs 采用了这个规范 一个单独的文件就是一个模块,加载使用 require 方法读取文件 CommonJS 是同步的,只有加载完成才能执行后面的操作 这种方法适用于文件已经在硬盘中了,加载速度快,如果是服务端文件,就要用其他方式了 ADM(Require.js) 支持浏览器环境 AMD 是 Require.js 推广的时候定义的规范 AMD 是…

理解 js 模块规范:CommonJS、AMD、CMD、UMD 和 ES6 module

5/13/20193 分钟阅读320

理解 js 的面对对象编程、面向过程编程、命令式编程和函数式编程(声明式编程)JavaScript

面向对象编程 如果对 js 的原型,原型链,__proto__不熟悉,可以看我之前对 原型,继承,设计模式介绍 面向对象编程的特点 每一个对象都可以被看作一个用户清晰角色或者责任的小机器 有命名空间:一个有着对象所有功能的容器 有 class 类:对象属性与方法的定义 有 Object:类一个实例 有 Property:对象的属性 有 Methods:对象的方法 有 Constructor:对象的…

理解 js 的面对对象编程、面向过程编程、命令式编程和函数式编程(声明式编程)

5/13/20193 分钟阅读330

js 设计模式-工厂模式JavaScript

什么是工厂模式 当去买一个 🍔 的时候,无须得到 🍔 的原材料,只需要获得到 🍔 对应工厂模式:不暴露创建对象的具体逻辑,将创建对象的方法封装到一个函数中,这个函数就是一个工厂 工厂模式按照抽象程度可以分为:1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 什么时候用工厂模式 对实例的封装,使用 new 操作符时候可以考虑用工厂模式 身边的工厂模式 $(selector) $()就是一个…

js 设计模式-工厂模式

5/12/20197 分钟阅读280

理解 js 的继承:原型链继承、构造函数继承、组合继承、原型继承、寄生继承、寄生组合继承和 ES6 class extendJavaScript

原型链继承 将父类的实例作为子类的原型 优点 父类方法可以复用 缺点 父类的引用属性会被所有子类共享 子类创建实例不能向父类传递参数 构造函数继承 将父类构造函数内容复制给子类构造函数 优点 可以在 Child 中向 Parent 传参 类的引用属性不会被共享 缺点 都在构造函数中定义,每次创建实例都会初始化方法或属性 父类方法不能复用 组合继承 构造函数继承与原型链继承结合 优点 父类的方法可以…

理解 js 的继承:原型链继承、构造函数继承、组合继承、原型继承、寄生继承、寄生组合继承和 ES6 class extend

5/12/20195 分钟阅读240

理解 js 的\_\_proto\_\_ 、prototype 和 constructorJavaScript

__proto__ __proto__ 指向它对应的原型对象 prototype 只有函数才有 prototype 属性 每个函数创建后都有 prototype 属性,一旦把这个函数当作构造函数,调用 new 操作符,js 就会创建构造函数的实例 创建一个实例,是通过__proto__指向构造函数的 prototype 来实现继承构造函数 prototype 的所有属性和方法的 construct…

理解 js 的\_\_proto\_\_ 、prototype 和 constructor

5/12/20192 分钟阅读250

理解 js this 绑定的 6 种规则:默认绑定、隐式绑定(隐式丢失)、显式绑定、new 绑定、严格模式下的 this、箭头函数绑定JavaScript

默认绑定 隐式绑定(隐式丢失) 显式绑定 new 绑定 严格模式下的 this 箭头函数绑定 默认绑定 this 指向 window 例子 1:在全局环境中,this 默认绑定到 window 例子 2:函数独立调用的时候,this 默认绑定到 window 例子 3:被嵌套函数独立调用的时候,this 默认绑定到 window 例子 4:IIFE 立即执行函数实际上是函数声明后直接调用执行 相当…

理解 js this 绑定的 6 种规则:默认绑定、隐式绑定(隐式丢失)、显式绑定、new 绑定、严格模式下的 this、箭头函数绑定

4/27/20196 分钟阅读180

理解 js 的作用域,作用域链,闭包JavaScript

作用域 作用域就是执行上下文,在执行上下文中会有内存分配与执行两个阶段。变量的的生命周期:声明,初始化,赋值 变量提升 在全局作用域或者函数作用域 var 声明变量允许在声明之前使用,值为 undefined,这个就是变量提升 块级作用域中声明的变量会提升到该作用域的头部,即允许在实际声明前使用 暂时性死区 在全局作用域或者函数作用域 let 或 const 声明变量,只允许在声明之后访问,在作用…

理解 js 的作用域,作用域链,闭包

4/27/20195 分钟阅读180