
javascript
文章平均质量分 95
wopelo
这个作者很懒,什么都没留下…
展开
-
Emscripten胶水代码初探
1.前言如果我们想把C/C++代码编译为WebAssembly,那十有八九就会用到Emscripten。在运行Emscripten相关编译指令后,我们可以得到wasm文件和js文件。如果在编译时添加对应的参数,我们还可以使用模板HTML或者将wasm文件放到web worker中执行。其中Emscripten编译生成的js文件即是所谓的胶水代码,我们只需要在自己的项目中引入这段胶水代码,胶水代码就会帮我们加载wasm模块,并且将定义在C/C++中的函数绑定在全局变量上供我们调用。本文主要简单的探索Em原创 2021-11-28 22:17:23 · 3062 阅读 · 0 评论 -
Vue3.0 Composition API响应式原理的简单模型
1.前言之前总结了一篇博客——《Vue响应式的简单模型》,里面介绍了观察者模式和发布订阅模式,并通过自己实现一个轻量级Vue框架的方式介绍了Vue2.0和3.0响应式的简单原理。但在自己实现的轻量级Vue框架中,仍然采用“传统”的Options API的方式。我们知道Vue3.0的一个亮点就是引入了Composition API,这篇博客就简单介绍一下Composition API响应式的原理。和之前《介绍Vue响应式的简单模型》一样,我们先介绍Composition API的核心原理,然后再通过自己原创 2021-05-23 18:45:34 · 524 阅读 · 1 评论 -
axios拦截器/koa中间件/express中间件/redux中间件的原理
1.前言最近在看redux相关的东西,发现redux也有中间件一说。之前接触的express、koa也有中间件的概念,而axios中也有拦截器这种相似的机制,那就正好梳理下这些概念的原理。阅读本篇文章之前,读者应该对axios、koa、express、redux有所了解。2.axios拦截器2.1 注册const axios = require('axios')axios.interceptors.request.use((config) => { console.log('请求拦截原创 2021-03-29 00:22:42 · 922 阅读 · 0 评论 -
JavaScript的this机制与箭头函数(二)——箭头函数中的this
这是《JavaScript的this机制与箭头函数》系列的第二篇文章,这里是系列的第一篇文章,主要讲解this的四种绑定机制,下面的内容会涉及到第一篇博文所讲解的部分知识点。 一开始接触箭头函数的时候就被其this的指向搞懵逼了,最后看了好多大牛的博客才搞清楚。 首先我们需要明白的是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this,这句话会解释箭头函数的很多行为——比如原创 2017-11-10 15:01:38 · 481 阅读 · 0 评论 -
Service Workers/Web Workers/WebSockets的区别
原文戳这里前言之前在看面经的时候看到了“Service Workers”这个名词,赶紧百度了一下,发现许多博客对它的描述是“一个Service Worker是一段运行在浏览器后台进程里的脚本,他独立于当前页面,提供了那些不需要与web页面交互的功能在网页背后悄悄执行的能力。”我眉头一皱,发现这句话好熟悉,好像在w3school上看到过,随后一找,发现了“Web Workers”,w3school的描翻译 2017-11-22 20:22:48 · 4005 阅读 · 1 评论 -
CommonJs / ES Module的用法和区别
由于JavaScript缺乏模块体系,在ES6之前,社区指定了一些模块加载方案,比如node.js所遵循的commonJS规范。而在ES6在语言层面上实现了模块功能,完全可以取代现有的commonJS等规范,成为浏览器、服务器通用的模块解决方案。本篇博客目录如下: 1.如何使用exports 2.如何使用module.exports 3.exports与module.exports的区别 4原创 2017-12-25 11:12:07 · 7288 阅读 · 0 评论 -
js实现继承的4种基本方式
在ES6之前,js创建对象都需要通过函数,如何实现继承成为一个问题。目前有很多人已经给出了自己的解决方案,但由于没有统一的定义,导致相同方式有多个名称、一种方式有多种变体。本文总结了4种最基本的方式,没有遗漏的话,其他方式应该就是下面四种方式的变体或者重命名。欢迎各位读者在评论区补充没有提及的基本方式。 需要强调的是,在js实现继承的过程中,父类或者子类的属性和方法是直接定义在原型上还是定义在实...原创 2018-02-13 21:07:17 · 565 阅读 · 0 评论 -
JavaScript的this机制与箭头函数(一)——this绑定的4种机制
传闻JavaScript有两座大山——this与作用域,在函数中,这两个难点会交织在一起。本来this就一脸懵逼,又有同样懵逼的作用域,所以说很多人就会 es6中,又出现了一个箭头函数,箭头函数的this又比普通函数的this“骨骼惊奇”得多。欲搞清楚箭头函数的this指向,必须要搞清楚this的四种绑定机制。 参考链接:深入理解this机制系列第一章默认绑定全局环境中,thi...原创 2017-11-10 14:32:19 · 727 阅读 · 1 评论 -
js延迟加载的几种方法
众所周知,在一个HTML页面加载的时候,如果遇到script标签,一般情况下会停止页面渲染,转而加载并执行脚本,等到脚本执行结束后才继续渲染页面。 但世界上存在可以使js延迟加载的方法,这些方法有助于提高页面加载速度1.defer属性作用脚本会立即下载,但要在页面已加载之后才运行脚本使用<script type="text/javascript" src="demo_d...原创 2018-02-21 12:09:43 · 4577 阅读 · 0 评论 -
js创建对象的6种基本方式
如何在js中创建对象,一直是一个值得关注的问题。有很多人在博客上进行了总结,但由于没有权威的定义,导致某些方式有多种不同的命名以及不同的变体。下文将介绍我总结的5种方式,如果没有遗漏的话,其他一些本文没有提及的创建方式应该都是下面5种方式的别名或者变体。欢迎各位读者在评论区补充我没有总结到的基本方式1.直接字面量let person={ key:value, ......原创 2018-02-13 20:53:42 · 552 阅读 · 0 评论 -
如何取消ajax请求
之前在面试的时候,被面试官问到了如何取消ajax请求,然鹅并不知道,被刷之后痛定思痛,总结了原生XHR、jquery、axios取消ajax请求的方法。原生XHR对于原生XHR对象来说,取消的ajax的关键是调用XHR对象的.abort()方法var native = new XMLHttpRequest();native.open("GET","https://api.gith...原创 2018-04-03 14:13:36 · 24308 阅读 · 4 评论 -
JavaScript里类的相关知识
function start(a,b){ this.a=a; this.b=b; this.c=function(){ console.log(this.a+this.b); }}var b=new start(1,2)1.对象 1.1 创建对象 总的说来就三种形式: 直接量:var ...原创 2017-10-07 20:02:03 · 307 阅读 · 0 评论 -
使用jiphy实现javascript/python的相互转换
在某些及其特殊的情况下,我们需要让js与python能够互相转换,这里推荐jiphy,安装jiphy需要事先安装好python,安装python很简单,但装好后记得把python根目录与scripts所在路径添加到path变量中去 安装pip稍微复杂一些,首先我们需要去下载pip 选择第二个.tar.gz,下载完成后解压到某个你认为合适的路径下,在该路径下执行以下两个指令python s原创 2017-09-09 10:36:23 · 17402 阅读 · 4 评论 -
函数构造法不同类方法相同出现的问题
最近,在做链表的时候发现了一个很有意思的问题。先为大家介绍一下背景——我分别写了三个js文件,分别定义普通链表、双向链表和循环链表的类及相关方法。三个文件中均采用了函数构造法定义类,代码如下 1.普通链表 2.双向链表 3.循环链表 为了方便检验,我还写了一个html文件以data.html及一个调用三种链表类的js文件data.js 结果发现在没有写循环链表之前,普通原创 2017-04-07 21:44:25 · 487 阅读 · 0 评论 -
“单线程/多线程”与“同步/异步”还有“阻塞/非阻塞”
最近在学习node.js的时候遇到了三对看起来有点让人摸不着头脑的词语——“单线程”、“多线程”、“同步”、“异步”、“阻塞”、“非阻塞”。倘若现在给你一秒钟,让你快速地在脑海里过一遍上面六个词语,估计很少有人会把它们的含义和区别理的特别清楚。下面是根据我收集到的资料加上自己的总结得出的一些结论。 1.同步与异步 同步与异步可以理解为一种“行为方式”。 所谓同步,就是在发出一个调用时,在没有得原创 2017-04-12 12:54:02 · 3174 阅读 · 0 评论 -
Promise浅析(一)——基础篇
之前在慕课网上学习nodejs时接触到了promise这个东东,感觉还不错,于是就想系统的学习一下。但很快就发现网上关于promise的资料有点少,于是就萌生了写有关promise的系列博客的想法。由于这个系列的博客我也是边学边写,难免会出现纰漏,所以有误的地方还请大家多多指正。 基础篇主要介绍什么是promise、promise的基本API。下面就进入正题。一、与Promise相关的概念 1.原创 2017-04-28 19:50:33 · 840 阅读 · 0 评论 -
JavaScript二叉查找树删除节点的实现原理
二叉树查找树虽然是个好东西,但并不是人人都能掌握其全部操作的原理。相对于二叉查找树的查找、添加,删除二叉查找树的节点貌似要难了很多。一开始看二叉查找树节点删除的时候,我和大多数人一样,面对实例代码,一丢丢也看不懂,不过推荐大家在以后遇见看不懂、复杂的代码块时试着用流程图去分析其中每一步的意义,这样或许能更好的解决问题。 首先,先展示二叉查找树的实现代码//节点类function node(dat原创 2017-05-02 15:24:33 · 1654 阅读 · 2 评论 -
JavaScript按值传递与按共享传递
在开始JavaScript按值传递与按共享传递的探讨之前,我们先要知道JavaScript的五种基本数据类型、按值传递与按引用传递的概念。 - JavaScript的5种基本数据类型分别是:Undefined、Null、Boolean、Number、String - 按值传递:函数的形参是被调用时所传实参的副本,修改形并不会影响实参。 - 按引用传递:函数的形参接收实参的内存地址,而不再原创 2017-05-10 12:46:05 · 1004 阅读 · 0 评论 -
高级排序算法
三种高级排序算法的javascript实现原创 2017-06-19 23:11:42 · 408 阅读 · 0 评论 -
基本排序算法
大家接触编程辣么久了,不知道有没有听说过这样一个说法——对计算机中储存数据执行的最常见的两种操作是排序和检索。不知道你们信不信,反正我信了。最基本的排序方法有三种,分别是冒泡、选择和插入。下面就给大家分别介绍一下这三种基本排序方法的javaScript实现。首先,声明一个测试类,这个测试类包含了后面将要用到的排序方法//测试类function CArray(elements){ this.原创 2017-06-09 20:48:47 · 305 阅读 · 0 评论 -
递归、迭代与动态规划
在这篇博客里,我将以计算斐波那契数列指定位置的数为例介绍递归、迭代与动态规划。首先我们得弄清楚这三者的定义。 递归——程序调用自身,也就是函数自己调用自己。递归通常从顶部将问题分解,通过解决掉所有分解出来的小问题,来解决整个问题; 迭代——利用变量的原值推算出变量的一个新值。递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换; 动态规划——通常与递归相反,其从底部开始解决问题。将所有原创 2017-07-09 20:35:48 · 3620 阅读 · 0 评论 -
ajax获取后台json数据莫名其妙出现空格
最近在做项目的时候,跟后台php用ajax连的时候出现了一个很奇葩的问题,当dataType参数为json时,报错误200。这个错误通常意味着后台返回的数据不是json。把dataType设置为text,通过输出返回字符串的长度等各种操作,发现返回回来的数据开头有空格。之前做项目的时候也采取类似的方式进行前台的联系,但都没有出现类似问题。 最后发现,因为我用的服务器是windows(临时的),服务原创 2017-07-21 23:23:09 · 2700 阅读 · 0 评论 -
js所能表示的最大整数的问题
半个小时前在牛客做笔试题时发现了这样一个问题 定义c为10011100011101111的字符串,不管是显示转换还是隐式转换最后出来的数字都是10011100011101112 更进一步实验发现 把10011100011101111赋予变量oo,再输出oo,结果为10011100011101112 目前通过实验发现超过16位且最后一位是1的整数在字符串/数字相互转换的时候会出现问题,原创 2017-09-25 21:53:36 · 22188 阅读 · 0 评论 -
AJAX中readyState与status的区别与联系
作为web前端大杀器之一的AJAX,它的出现颠覆了很多人对web前端的理解,从我个人的角度看来,如果说1996年html/css/javascript三神器的终于集齐,使得web前端拥有了召唤神龙的能力,那么ajax就是三神器召唤出来的第一条神龙,从此以后,前后端代码拥有了完全分开的可能,在遇见要向后台传参之类的问题时,前端程序猿们都可以自信的喊出:竜が我が敵をくらえ。。。。。 在使用AJAX时,原创 2017-03-20 21:47:16 · 1653 阅读 · 0 评论