commonjs

从零开始手写Promise

余生长醉 提交于 2020-08-04 20:06:23
  面试的时候经常会问到Promise的使用;有的面试官再深入一点,会继续问是否了解Promise的实现方式,或者有没有阅读过Promise的源码;今天我们就来看一下,Promise在内部是如何实现来链式调用的。 什么是Promise   所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。 Promise 提供统一的 API ,各种异步操作都可以用同样的方法进行处理。   Promise出现之前都是通过回调函数来实现,回调函数本身没有问题,但是嵌套层级过深,很容易掉进 回调地狱 。 const fs = require ( 'fs' ); fs.readFile( '1.txt' , (err,data) => { fs.readFile( '2.txt' , (err,data) => { fs.readFile( '3.txt' , (err,data) => { //可能还有后续代码 }); }); }); 复制代码   如果每次读取文件后还要进行逻辑的判断或者异常的处理,那么整个回调函数就会非常复杂且难以维护。Promise的出现正是为了解决这个痛点,我们可以把上面的回调嵌套用Promise改写一下: const readFile = function (

一位前端小姐姐的进阶笔记(一)

让人想犯罪 __ 提交于 2020-07-29 09:00:53
本文首发于微信公众号——世界上有意思的事,搬运转载请注明出处,否则将追究版权责任。交流qq群:859640274 继 一位前端小姐姐的五万字面试宝典 这篇文章之后。 徐漂漂 小姐姐再次投稿,本文是最近小姐姐整理的前端进阶笔记。干货依然成吨,全程依旧高能。希望大家多点赞、评论、关注,给小姐姐继续写文章的动力! 小姐姐的个人博客 小姐姐依然在看机会哟。base 北京,邮箱已经附在 GitHub 上了。欢迎有坑位的同学进行推荐。 一、apply/call/bind 一网打尽 首先,这三个方法是用来改变 this 指向的,接下来我们看一下它们的异同。 1. apply 调用一个对象的一个方法,用另一个对象替换当前对象。例如: B.apply(A, arguments) ; 即 A 对象应用 B 对象的方法。 要注意的是第一个参数,如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象,而其他原始值则会被相应的包装对象(wrapper object)所替代。 1.1 如何实现一个apply 回顾一下 apply 的效果,我们可以大致按以下思路走 实现第一个参数的功能,改变 this 指向 实现第二个参数的功能。第二个参数是作为调用函数的参数 返回值:使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回

还搞不懂闭包算我输(JS 示例)

主宰稳场 提交于 2020-07-28 19:31:18
闭包并不是 JavaScript 特有的,大部分高级语言都具有这一能力。 什么是闭包? A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment ). 这段是 MDN 上对闭包的定义,理解为:一个函数及其周围封闭词法环境中的引用构成闭包。可能这句话还是不好理解,看看示例: function createAction() { var message = "封闭环境内的变量"; return function() { console.log(message); } } const showMessage = createAction(); showMessage(); // output: 封闭环境内的变量 这个示例是一个典型的闭包,有这么几点需要注意: showMessage 是 createAction 执行后从中返回出来的一个 函数 。 createAction 内部是一个封闭的词法环境, message 作为该封装环境内的变量,在外面是绝不可能直接访问。 showMessage 在 createAction 外部执行,但执行时却访问到其内部定义的局部变量

浅析 MVC

旧城冷巷雨未停 提交于 2020-07-27 10:48:44
MVC 是什么 MVC (Model-View-Controller) 是一种软件设计模式.它强调分离软件的业务逻辑和显示. 这种“分离”提供了更好的分工和改进的维护 一些其他的模式也是基于MVC来设计的, 像 MVVM (Model-View-Viewmodel), MTP (Model-View-Presenter), 和 MVW (Model-View-Whatever) 简单来说MVC是一种设计模式,在前后端都用到了这种设计模式 M - Model : 模型持有所有的数据、状态和程序逻辑 V - View : 负责界面的布局和显示 C - Controller : 负责模型和界面之间的交互 用伪代码来解释一下 1. M: const m = { data : x // 里面是一些需要更新和改变的数据 } 2. V const v = { el : el , // el 相当于一个容器,来放置动态渲染的 html html : `<div>我是需要渲染的{{x}}</div>` , //把 m 里的数据 render ( v . el ){ // 这里让 m.data.x 替换成 html 的 {{x} } 然后加到 v . el 中 } 3. C const c = { events : { "click #add" : "add" , "click #reduce" :

搭建node服务(三):使用TypeScript

。_饼干妹妹 提交于 2020-07-26 02:21:11
搭建node服务(三):使用TypeScript JavaScript 是一门动态弱类型语言,对变量的类型非常宽容。JavaScript使用灵活,开发速度快,但是由于类型思维的缺失,一点小的修改都有可能导致意想不到的错误,使用TypeScript可以很好的解决这种问题。TypeScript是JavaScript的一个超集,扩展了 JavaScript 的语法,增加了静态类型、类、模块、接口和类型注解等功能,可以编译成纯JavaScript。本文将介绍如何在node服务中使用TypeScript。 一、 安装依赖 npm install typescript --save npm install ts-node --save npm install nodemon --save 或者 yarn add typescript yarn add ts-node yarn add nodemon 另外,还需要安装依赖模块的类型库: npm install @types/koa --save npm install @types/koa-router --save … 或者 yarn add @types/koa yarn add @types/koa-router … 二、 tsconfig.json 当使用tsc命令进行编译时,如果未指定ts文件

Is it possible to use react-select in the browser from the cdn?

拥有回忆 提交于 2020-07-23 06:45:54
问题 Is it possible to use react-select directly from the browser without bundlers nowadays? The most recent version that I found to be able to do so was 2.1.2: How to import from React-Select CDN with React and Babel? They used to provide react-select.min.js in the umd format back then. Nowadays they have react-select.browser.esm.js and react-select.browser.cjs.js (https://unpkg.com/browse/react-select@3.1.0/dist/), but I couldn't get any of those working from the browser. 来源: https:/

syntax differences between CJS & ES6 modules

余生长醉 提交于 2020-07-10 06:21:46
问题 In CJS modules I would use export and var plugin = require('plugin'); to export/import In ES6 modules I would use export and import * as plugin from 'plugin'; to export/import. Are there more syntax differences? are these ^ differences correct? What does export default and export * ? 回答1: CommonJS modules and ES6 modules are pretty similar, but they have some very important differences to be aware of. To answer your question directly first: var plugin = require('plugin'); in ES6 would be

Typescript & Electron exports is not defined

≡放荡痞女 提交于 2020-05-15 06:45:24
问题 I'm trying to run my simple electron app. I use Typescript as a development language which compiles into JavaScript. When I run the app I get the following error: ReferenceError: exports is not defined[Learn More] file:///Users/ahmet/Documents/JumbleUp-Desktop/dist/Login/Login.js:5 exports.__esModule = true; My login.ts file looks like this import firebase from "firebase"; firebase.auth().onAuthStateChanged(function(user) { if (user) { location.replace("index.html"); } else { location.replace

霖呆呆的近期面试128题汇总(含超详细答案) | 掘金技术征文

梦想与她 提交于 2020-05-09 13:20:30
前言 你盼世界,我盼望你无 bug 。Hello 大家好!我是霖呆呆! 哈哈😄,这是一篇面试总结文章,抱歉, webpack 和 HTTP 系列的先暂缓一下更新哈,Sorry~ 这篇文章是呆呆自己近期的一些面试汇总,算了一下有128道,基本都写了比较完善的答案,就算没有写也有推荐一些好的文章链接,文章篇幅较大,整理总结也花费了很多的时间和心血,题目也是根据公司规模的大小从易到难,算是见证了呆呆面试过程中的不足与成长吧 😅。还希望能帮助到正在一起努力求生存的小伙伴们。 另外,看到标题了吗? "掘金技术征文" ,嘻嘻,要不要考虑帮这么 "用心" 的呆呆拿拿大奖呢?放心放心,要真成了好处少不了你们😋。 所有文章内容都已整理至 github.com/LinDaiDai/n… 快来给我Star呀😊~ (因为近期面的主要都是一些深圳的中小公司,他们也还在招聘中,所以不便透露公司名称,还请大家理解...) 深圳某做海外加速器公司 4月22日上午 1. DIV+CSS布局的好处 代码精简,且结构与样式分离,易于维护 代码量减少了,减少了大量的带宽,页面加载的也更快,提升了用户的体验 对SEO搜索引擎更加友好,且H5又新增了许多语义化标签更是如此 允许更多炫酷的页面效果,丰富了页面 符合W3C标准,保证网站不会因为网络应用的升级而被淘汰 缺点: 不同浏览器对web标准默认值不同

webpack Tree-shaking的总结

浪尽此生 提交于 2020-05-08 10:14:47
1. Tree-shaking只对ES Module起作用,对于commonjs无效,对于umd亦无效 因为tree-shaking是针对静态结构进行分析,只有import和export是静态的导入和导出。而commonjs有动态导入和导出的功能,无法进行静态分析。 如下代码,只有运行代码的时候才能知道导入的内容; // 运行时才知道的导入内容 var my_lib; if (Math.random()) { my_lib = require('foo' ); } else { my_lib = require('bar' ); } // 运行时才知道的导出的内容 if (Math.random()) { exports.baz = function baz(){}; } 2. babel编译默认将模块转换为commonjs,需要配置.babelrc的{module:false} 和 package.json的{sideEffects: false}才可以进行tree-shaking 3. rollup的tree-shaking比webpack的要强一些 4. webpack4默认开启tree-shaking,具体可参考 webpack4的tree-shaking 来源: oschina 链接: https://my.oschina.net/u/4356138/blog