JavaScript 10
-
【每日一面】实现一个深拷贝函数
基础问答 问:知道浅拷贝和深拷贝吗?为什么要用深拷贝? 答:拷贝,可以认为是赋值,对于 JavaScript 中的基础类型,如 string, number, null, boolean, undefined, symbol 等,在赋值给一个变量的时候,是直接拷贝值给变量,而对于引用类型,如 obj
-
【每日一面】你怎么理解 Proxy 的
基础问答 问:Proxy 是什么?怎么使用的? 答:Proxy 是用于创建 “对象代理” 的构造函数,它能封装目标对象(target),并通过 “拦截器对象(handler)” 自定义目标对象的基础操作(如属性读取、赋值),实现对对象行为的 “劫持”,手写使用方式。 // 语法:new Proxy(
-
【每日一面】async/await 的原理
基础问答 问:async/await 的原理是什么? 答:关键字本身就是 Promise 的语法糖,依托于生成器函数 (Generator) 函数能力实现的。async 关键字标志这个函数为异步函数,并且将返回结果封装为一个 Promise,await 则是暂停当前执行,等待后续的异步操作完成后再恢
-
【每日一面】React Hooks 闭包陷阱
基础问答 问题:谈一谈你对 React Hook的闭包陷阱的理解。 产生问题的原因:JavaScript 闭包特性 + Hooks 渲染机制 闭包的本质:函数能够访问其定义时所在的词法作用域,即使函数在作用域外执行,也可以记住定义时的词法作用域的内容,后续执行时,使用这些信息。 function c
-
【每日一面】任意 dom 元素吸顶
简洁版 CSS 只需要使用 css 属性 position: sticky 即可,但是这个属性的使用有很多约束条件,有时可能并不能生效。 JavaScript 这里简化一些代码,使用 React 写了一个 hooks,使用了 ahooks 库去维护 event 和 React 生命周期。 impor
-
JavaScript 沙箱
概述 沙箱可以简单的理解为一个虚拟机,是一个和宿主机隔离的环境,在这个环境中去运行一些不受信任的代码或者应用程序,防止不安全的代码对系统造成损害。 比如我们现在知道某个应用是诈骗软件或者病毒软件,但是我们依旧想要运行,想逆向分析他,那么我们就可以选择在电脑上安装一个虚拟机,在这个虚拟机中,我们将对摄
-
【每日一面】获取文字的真实宽度
简洁版 代码如下: /** * 创建用于获取文字宽度的 DOM,全局唯一 * @returns */ const createTextDom = (fontSize?: number): HTMLElement => { let dom = document.getElementById(
-
浅浅的聊一下 WebSocket
第一次看到 ws:// 和 wss:// 时候,感觉好高级啊,还有这种协议。 Websocket 历史 WebSocket 是在2008年6月诞生的1。经由 IEFT 标准化后,2009年 chrome 4 第一个提供了该标准支持,并默认启用。于2011年由 IEFT 标准化为 RFC 6455。
-
想学canvas?那一定要看看这篇文章
canvas 简介 在学习一项新技术之前,先了解这项技术的历史发展及成因会帮助我们更深刻的理解这项技术。 历史上,canvas 最早是由 Apple Inc. 提出的,在 Mac OS X webkit 中创建控制板组件使用,而在 canvas 称为 HTML 草案及标准之前,我们是通过一些替代方式
-
《你不知道的JavaScript》笔记(一)
用了一个星期把《你不知道的JavaScript》看完了,但是留下了很多疑惑,于是又带着这些疑惑回头看JavaScript的内容,略有所获。 第二遍阅读这本书,希望自己能够有更为深刻的理解。 词法作用域 ……如果是 **有状态** 的解析过程,还会赋予单词语义…… 这本书是以编译原理的部份内容结合 J