自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

mj的博客

记录学习过程

  • 博客(25)
  • 收藏
  • 关注

原创 工作中如何使用 git

前言最近在网上有个真实发生的案例比较火,说的是一个新入职的员工,不会用 git 拉代码,第二天被开除。由此,可见 git 对我们工作的重要性,无论是前端后端,都是离不开 git 的,下面就让我们一探究竟吧。上面的案例引申出一个问题,入职一家新公司,你的 leader 给你分配了仓库的权限后,如何配置本地的git环境并拉取代码?莫慌,按照下面我讲的四个步骤走,保证你可以顺利使用 git 进行拉取代码! 下载 git 下载地址 ,选择自己系统对应的版本下载即可。 在你的电脑上生成 ssh

2021-06-18 18:13:44 569

原创 V8 执行 Javascript 过程

前言本文意在简单的介绍一下 V8 执行 JS 的过程,通过了解 V8 执行 JS 的过程,知道 JS 代码呈现在浏览器上到底做了什么。当然本人也是在陆续探索 V8 ,文章中如有不当之处,还望不吝指正,理性交流。众所周知,机器(CPU)只能识别机器码(二进制码),对于 JS 代码,它是识别不了的,所以当代码成为页面出现在屏幕上的时候,必然是做了很多的转译工作。V8 执行 Javascript 过程如上图所示,我们将一步步进行拆分分析:JS TO AST在 V8 引擎拿到 JS 代码

2021-06-18 11:37:06 232

原创 浏览器进程和js事件循环

浏览器是多进程的浏览器的简化理解浏览器是多进程的,市场上的大多数浏览器是用C#, C ,C++写的 浏览器之所以能够运行,是因为系统给它的进程分配了资源(cpu、内存) 简单点理解,每打开一个Tab页,就相当于创建了一个独立的浏览器进程 而js能够在浏览器上运行,是因为大名鼎鼎的 v8引擎⚠️注意: 可以这么理解,浏览器是平台载体,而js是运行在这个平台上的语言Chrome浏览器打开多个标签页, 在 任务管理器 中看到有多个进程(一个Tab页面一个独立进程外加一个主程) 同步和异步

2021-06-09 09:33:55 325

转载 数组reduce高级用法实践

作者:JowayYoung仓库:Github、CodePen博客:官网、掘金、思否、知乎公众号:IQ前端特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者授权前言reduce作为ES5新增的常规数组方法之一,对比forEach、filter和map,在实际使用上好像有些被忽略,发现身边的人极少使用它,导致这个如此强大的方法被逐渐埋没。如果经常使用reduce,怎么可能放过如此好用的它呢!我还是得把他从尘土中取出来擦干净,奉上它的高级用法给大家。一个如此好用的方法不应...

2021-06-04 15:54:59 387

转载 ES6 尾调用和尾递归优化

尾调用优化尾调用之所以与其他调用不同,就在于它的特殊的调用位置。我们知道,函数调用会在内存形成一个“调用记录”,又称“调用帧”(call frame),保存调用位置和内部变量等信息。如果在函数A的内部调用函数B,那么在A的调用帧上方,还会形成一个B的调用帧。等到B运行结束,将结果返回到A,B的调用帧才会消失。如果函数B内部还调用函数C,那就还有一个C的调用帧,以此类推。所有的调用帧,就形成一个“调用栈”(call stack)。尾调用由于是函数的最后一步操作,所以不需要保留外层函数的调用帧,因为

2021-06-03 11:30:06 518

原创 浅谈函数柯里化

关于函数柯里化的定义:在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。  这段话听起来可能有一些抽象,但是如果用实际例子来解释可能会帮助我们更好地理解何为函数柯里化。看看下面这个问题,是一道前端面试中常考的题:如何实现add(2)(3)(4) = 9  当我第一次看到这个题目的时候我就在思考,add(2)后面为什么还能带(3)(4)呢?是不是因为add(2)返回的是一个函数,所

2020-06-23 17:51:55 279

原创 vuepress搭建个人博客

项目搭建#安装vuepress第一步就是进行vuepress进行安装: 如果使用npm来安装, Node.js版本需要 >=8 才可以yarn global add vuepress # 或者:npm install -g vuepress#注意如果你的现有项目依赖了 webpack 3.x,推荐使用 Yarn而不是 npm 来安装 VuePress。因为在这种情形下,npm 会生成错误的依赖树。#初始化项目创建项目目录blogmkdir blogcd bl

2020-06-19 17:04:59 715 1

原创 window命令行新建文件

touch是Linux环境下的命令,当我们在cmd中使用时会弹出以下问题在cmd中我们可以使用echo test>

2020-06-08 11:35:35 1171 1

原创 js位运算相关内容

位运算是直接进行二进制运算,所以位运算的执行效率是更高的,可以在项目中优先使用

2020-05-07 19:08:56 113

原创 微信小程序返回页面传参方法

1.可以用wx.setStorageSync()存储到本地2.使用小程序页面栈来设置需要传的值let pages = getCurrentPages() //获取页面栈let prevPage = pages[pages.length - 2] //获取上一个页面的实例prevPage.setData({ fileUrl: this.data.url //设置想要传过去的...

2019-12-27 15:59:46 1068

原创 Git工作中常用操作

Git是目前世界上最先进的分布式版本控制系统,它没有中央服务器,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。工作原理 / 流程:Works...

2019-12-12 11:52:32 131

原创 获取对象拥有属性的方法及区别---for in、Object.hasOwnProperty、Object.getOwnPropertyNames、Object.keys

获取对象属性有好多种方法,每种方法也都有区别,下面具体说一下: const obj = { name: 'mj', age: 16, greet () { console.log('Hello ' + this.name) } } Object.prototype.printAge = function () { console....

2019-11-29 17:40:34 351

原创 深入学习js数据类型的转换规则

js中的数据类型js中共有八种内置数据类型,包括基本类型和对象类型。基本类型基本类型分为以下七种:string(字符串) boolean(布尔值) number(数字) BigInt(大于的整数) symbol(符号) null(空值) undefined(未定义)注意: string、number、boolean、null、undefined这...

2019-11-25 18:49:48 201

原创 websocket简单使用

随着 Web 的发展,用户对于 Web 的实时推送要求也越来越高,在 WebSocket 出现之前,大多数情况下是通过客户端发起轮询来拿到服务端实时更新的数据,因为 HTTP1.x 协议有一个缺陷就是通信只能由客户端发起,服务端没法主动给客户端推送。这种方式在对实时性要求比较高的场景下,比如即时通讯、即时报价等,显然会十分低效,体验也不好。为了解决这个问题,便出现了 WebSocke...

2019-11-22 18:43:30 384

原创 生成PayPal沙盒账号clientID 和 密钥的过程

因为最近项目中要引用PayPal支付,网上查了很多资料,这里把生成sandbox测试账号的client.app和client.secret过程记录一下第一步,浏览器输入“https://www.paypal.com”,注册一个PayPal的商家账户,如果公司有账号的话,直接用公司账号;第二步:注册好之后就可以用这个账号去登陆PayPal的开发者平台了,网址是“https://develop...

2019-11-20 11:02:40 2725

原创 前端删除node_modules最快的办法

安装 rimraf可以全局安装,每个项目都可以使用npm install rimraf -g //安装rimraf在项目里面打开命令行工具rimraf node_modules //删除文件

2019-11-18 11:12:59 1235

原创 LHS 和 RHS---你所不知道的JavaScript

目录1、LHS(Left Hand Side)和RHS(Right Hand Side)2、实例详解3、总结变量的赋值操作会执行两个动作, 首先编译器会在当前作用域中声明一个变量(如果之前没有声明过), 然后在运行时引擎会在作用域中查找该变量, 如果能够找到就会对它赋值。----《你所不知道的JavaScript(上)》P7而要讲的 LHS 和 RHS 就是上面说的对变...

2019-10-30 14:49:43 599

原创 js将秒转换为对应的时间字符串

将秒转换为对应的时间字符串,每个条件都return,可以自定义返回需要的时间/** * @param {Number|String} second 秒 * @returns {String} 转换后时间字符串 */const transformTime = (second = 0) => { if(isNaN(parseInt(second))) return; se...

2019-10-26 16:56:45 576

转载 彻底吃透 JavaScript 执行机制

执行 & 运行 首先我们需要声明下,JavaScript 的执行和运行是两个不同概念的,执行,一般依赖于环境,比如 node、浏览器、Ringo 等, JavaScript 在不同环境下的执行机制可能并不相同。而今天我们要讨论的 Event Loop 就是 JavaScript 的一种执行方式。所以下文我们还会梳理 node 的执行方式。而运行呢,是指JavaScript 的解析引擎。这...

2019-10-24 19:11:45 192

原创 手动实现new操作符

new操作符都做了什么function Person(name) { this.name = name}Person.prototype.sayName = function () { console.log(this.name)}const p = new Person('mj');console.log(p.name) // 'mj'p.sayName() // 'm...

2019-10-24 17:57:17 418

原创 前端vue常用插件

服务端渲染(SSR)预渲染:prerender-spa-plugin nuxt.js数字动画: countup日期处理: dayjscookie: js-cookiemd5: js-md5拖动:vuedraggable树形结构:vue-org-tree图片裁剪:cropperjs文本复制:clipboard模拟数据:mockjs...

2019-10-23 18:29:14 328

原创 幽灵遮罩的奇妙用途

我们把创建空白遮罩的处理称其为幽灵遮罩。幽灵遮罩可以拓展用户可点击区域,又或者你想让用户看到元素,但又不想要用户可以操作。这里拿起点小说的阅读页举例,我整个页面想要点击除开书封和黄色区域以外的区域都触发工具栏。如果用 JS 去判断,就要监听整个页面的点击事件,然后判断这个点击事件是否冒泡到书封或者是黄色区域。如果是则阻止这个点击事件,如果不是则呼出工具栏。并且如果这个页面后...

2019-10-21 16:52:44 160

原创 Chrome 中文网页的字体 12px 限制的解决方法

Chrome浏览器一直有字体限制,中文网页的字体不能小于12px,英文网页的字体不能小于6px(或10px)1、自Chrome27之后-webkit-text-size-adjust:none就无效了(pass掉)2、用transform: scale()来实现,通多缩放比例来实现不同大小的字体.text{ font-size: 10px; -webkit-tran...

2019-10-19 11:45:04 474

转载 从面向对象设计角度,全面解读——JS中的函数与对象、Object与Function、以及原型链与继承

本文,将会抛开__proto__的存在,转而从JS语言面向对象设计的角度,去全面解读函数与对象、Object与Function、以及原型链与继承。主题目录如下:类与对象的概念JS中的对象JS中的objectJS中的函数JS中的函数与objectJS中的对象与native codeJS函数的newJS函数的prototypeJS内置函数的命名JS中的原型链JS中的继承JS中的instanceofJS...

2019-10-18 10:53:43 251 3

原创 js常用的开发技巧

目录1.获取查询字符串参数2.数组里面的数据类型转换3.避免对象被改变4.数组去重5.判断数据类型6.遍历类数组对象1.获取查询字符串参数let params = "name=qwe&id=12";let searchParams = new URLSearchParams(params);for (let itemof searchParams)...

2019-10-17 16:11:44 329

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除