李轻舟

Results 21 comments of 李轻舟

有进行对应配置吗? https://github.com/vbenjs/vite-plugin-mock/blob/HEAD/README.zh_CN.md#%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8

BFC,Block Format Context,块格式化上下文,是页面上一个样式独立不干扰外界也不受外界干扰的盒子。 Formatting context(格式化上下文) 则是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。BFC 便是种定义了对应规则的盒子。 下列方式会创建块格式化上下文: - 根元素或包含根元素的元素 - 浮动元素(元素的 float 不是 none) - 绝对定位元素(元素的 position 为 absolute 或 fixed) - 行内块元素(元素的 display 为 inline-block)...

## JS中基本数据类型 - 原始数据类型 (不是对象且没有方法) Boolean、Null、Undefined、Number、String、Symbol(ES6 新增)、BigInt(ES10) 1. Boolean 类型 表示一个逻辑实体,有两个值:true 和 false。 2. Null 类型 表示缺少的标识,指示变量未指向任何对象。 3. Undefined 类型 一个没有被赋值的变量会有个默认值 undefined。 4. Number 类型 根据 ECMAScript 标准,Number 基于 IEEE...

## 什么是语义化? 语义化是根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析。 ## 语义化优点: - 易于用户阅读,样式丢失的时候能让页面呈现清晰的结构。 - 有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权重。 - 方便其他设备解析,如盲人阅读器根据语义渲染网页 - 有利于开发和维护,语义化更具可读性,代码更好维护,与CSS3关系更和谐。

**事件代理** 就是在祖先级DOM元素绑定一个事件,当触发子孙级DOM元素的事件时,利用**事件流**的原理来触发绑定在祖先级DOM的事件。 ### 事件流 DOM(文档对象模型)结构是一个树型结构,当一个HTML元素产生一个事件时,该事件会在元素结点与根结点之间的路径传播,路径所经过的结点都会收到该事件,这个传播过程可称为DOM事件流。 因为历史的原因,IE最开始实现实现事件流的方式:冒泡事件(event bubbling),Netscape提出了另外一种事件流方式:事件捕获(event capturing),不同的浏览器实现上有一些差别,用起来就有些繁琐。幸好现代浏览器都实现了W3C制定的"DOM2级事件","DOM2级事件"把事件流分为三个阶段,捕获阶段、目标阶段、冒泡阶段。 ![JS事件捕获和事件冒泡原型图](https://user-images.githubusercontent.com/30641714/58937187-48f65400-87a4-11e9-8b81-c453d67b171a.png) 这个问题回答起来,有些无从下手的感觉,事件流的概念不是很好描述,之前个人的理解很浅显。 [javascript事件代理(delegate)原理解析](https://www.cnblogs.com/webhelper/p/5616477.html)

## 什么是闭包? > ### **闭包是函数和声明该函数的词法环境的组合。** 闭包是由函数以及创建该函数的词法环境组合而成。这个环境包含了这个闭包创建时所能访问的所有局部变量。 ![函数工厂](https://user-images.githubusercontent.com/30641714/59197446-f235b380-8bc3-11e9-95ec-2bb329782bce.png) 这是[MDN](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures)上的一个示例。 ## 闭包的作用是什么? 模拟私有方法,定义公共函数(模块模式),以及上例中的函数工厂。使用闭包可以实现这些功能,这样回答闭包的作用不知道是否恰当。楼上同学对于作用的回答可能更合适一些。 ## 性能考量 如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响。 例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。原因是这将导致每次构造器被调用时,方法都会被重新赋值一次(也就是,每个对象的创建)。 这是个很典型的例子,学到构造函数和原型的时候总会有提及。 ``` function MyObject(name, message) { this.name = name.toString(); this.message = message.toString(); this.getName = function()...

### 单线程 JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。这与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。 ### 任务队列 单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。 于是,所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。 具体来说,异步执行的运行机制如下。(同步执行也是如此,因为它可以被视为没有异步任务的异步执行。) (1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。 (2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。 (3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。 (4)主线程不断重复上面的第三步。 下图就是主线程和任务队列的示意图。 ![主线程和任务队列的示意图](https://user-images.githubusercontent.com/30641714/59148078-6a6e6e80-8a36-11e9-984d-cdfb1f7d74f2.png) ### Event Loop(事件循环) 主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。 为了更好地理解Event Loop,请看下图(转引自Philip Roberts的演讲《Help, I'm stuck in an...

1. 作用域 let 声明的变量 和 const 声明的常量只在声明所在的块级作用域内有效;var 声明的变量的作用域是函数作用域。 ```javascript if (true) { const MAX = 5; let a = 10; var b = 1; MAX // 5 a // 10...

函数节流: 指定时间间隔内只会执行一次任务; 以判断页面是否滚动到底部为例,普通的做法就是监听 window 对象的 scroll 事件,然后再函数体中写入判断是否滚动到底部的逻辑: ```javascript $(window).on('scroll', function() { // 判断是否滚动到底部的逻辑 let pageHeight = $('body').height(), scrollTop = $(window).scrollTop(), winHeight = $(window).height(), thresold = pageHeight - scrollTop - winHeight;...