Chuck
Chuck
### display: none DOM 元素在渲染时不会占用空间。将其从文档流中取出,并将其从可访问性树中删除,不会响应任何事件。 ### opacity: 0 更改元素透明度,仍然在文档流中,并且可响应事件。假如页面上有几个单/复选框,可通过 tab 键顺序切换。 ### visibility: hidden 更改元素的可见性,仍然在文档流中,不会响应任何事件。visibility: hidden 样式的行为类似于 opacity: 0 和 pointer-events: none 的组合。
lodash 中的这个方法是用于获取一个变量里的值的,因为很多时候通过点式访问很可能报错,所以希望对路径不存在的返回默认值。 ```js function _get(obj, keys, defaultVal) { let lists if (Array.isArray(keys)) { lists = keys } else { lists = keys.replace(/\[/g, '.').replace(/\]/g, '').split('.') // 字符串直接根据 . 分割为数组 } let...
我们经常会看到同步任务和异步任务的文章,而且对这些概念的认知都根深蒂固了,但什么是任务呢?下面是一段对任务的描述: > A task is any JavaScript code which is scheduled to be run by the standard mechanisms such as initially starting to run a program, an event callback being...
```js function debounce(func, wait) { let timer = null let flag = true return function () { clearTimeout(timer) if (flag) { func.apply(this, arguments) flag = false } timer = setTimeout(()...
如何理解浏览器的进程和线程呢?其实在浏览器中每打开一个 tab 页面,就开启了一个进程。由于在一个进程下,可以有多个线程,所以浏览器进程下又划分了 GUI 渲染线程和 JavaScript 引擎线程。由于 JavaScript 引擎线程在执行中是可能会更改 DOM 的,所以出于线程安全考虑,GUI 渲染线程和 JavaScript 引擎线程是互斥的,同一时间下只会有一个掌握有控制权(执行权)。
Chrome 浏览器 JavaScript 引擎执行代码主要分为了三个过程: 1. **语法分析阶段**:对代码进行语法分析,检查语法错误。 2. **编译阶段**:该阶段会进行执行上下文(Execution Context)的创建,包括创建变量对象、建立作用域链、确定 this 的指向等。每进入一个不同的运行环境时,V8 引擎都会创建一个新的执行上下文。 3. **执行阶段**:将编译阶段中创建的执行上下文压入调用栈,并成为正在运行的执行上下文,代码执行结束后,将其弹出调用栈。 重点看下编译阶段,这个阶段的核心是执行上下文的创建。 ## 执行上下文的创建 执行上下文的创建离不开 JavaScript 的运行环境,JavaScript 运行环境包括全局环境、函数环境和 eval。 全局环境和函数环境的创建过程如下: 1. 第一次载入 JavaScript 代码时,首先会创建一个全局环境。全局环境位于最外层,直到应用程序退出后(例如关闭浏览器和网页)才会被销毁。 2. 每个函数都有自己的运行环境,当函数被调用时,则会进入该函数的运行环境。当该环境中的代码被全部执行完毕后,该环境会被销毁。不同的函数运行环境不一样,即使是同一个函数,在被多次调用时也会创建多个不同的函数环境。 每进入一个不同的运行环境时,JavaScript...
### Git 恢复修改文件 Git 提交的工作流程是:工作区 ——> 暂存区 ——> 仓库区,如果要恢复已经提交的文件,那么就需要反过来执行这一个流程。 所以按照分类,提交的文件存在 3 种情况: 1. 只是进行了修改操作,仍处于工作区; 2. 修改了文件并已经提交,处于暂存区; 3. 修改了文件并已经提交,处于仓库区。 那么对应的就有 3 种解决方法,首先来看如何处理第一种情况。 1. 只需要执行一条命令 git checkout -- README.md; 2. 由于还没有生成提交记录 hash...
有这样两个 number 类型的数组,需要求两个数组之间的交集。如果不借助 API,最先想到的是通过 for 循环来解决。 ```js function findCommon (arr1, arr2) { var arr = [] for (var i = 0; i < arr1.length; i++) { for (var j =...