前端语言 | 青训营笔记

34 阅读3分钟

前端语言

DOM 把HTML部分转化为JS对象

一次 “点击” 操作对应事件捕捉(对计算机,找到精确的触发元素)与事件冒泡(对开发者,进行事件代理)

CSS

Cascading Style Sheets层叠样式表(样式表对应规则声明的集合,层叠保证解决规则声明间的冲突)

优先级:
内联 > id > class = attribute = pseudo-class > type = pseudo-element
:is(), :not(), :has()本身不计入优先级,以参数中最高优先级为准
:where()优先级为 0
相同优先级,以较后出现的css代码为准

TIPS:

  • 选择器少用id(影响复用)
  • 尽量不要用!important
  • 自己的样式加载在引用库样式的后面(确保生效)

inherit关键字显示指定一个属性值从其父元素继承
浏览器根据视觉格式化模型,将所有元素表示为盒子模型,css通过盒模型做layout

padding、border、margin中,只有margin可以设置负值;
如果设置左侧或顶部的负外边距,元素就会相应地向左或向上移动,导致与之前的元素重叠(覆盖);如果设置右侧或底部的负外边距,并不会移动元素,而是将后面的元素拉过来(导致被覆盖)

(默认)常规流布局:
任意盒子都有一个内部显示类型和一个外部显示类型

父子元素重叠时,display:flow-root设置父元素为BFC,使得父子不在同级BFC中,消除边距塌陷

内联格式化上下文生成一系列隐含的 linebox

JavaScript

单线程 与GUI互斥
基础数据类型存储在栈上,复杂数据类型存储在堆上
const、let没有变量提升,提前使用会报错

当JS引擎解析到可执行代码片段(通常是函数调用)时,会做一些执行前的准备工作,即 执行上下文(执行环境)
全局执行上下文:代码开始执行时创建,压执行栈的栈底,每个生命周期只有一份
函数执行上下文:执行一个函数时,这个函数内的代码被编译,生成变量环境、词法环境等;当函数执行结束后该执行环境从栈顶弹出
调用栈存放各种执行上下文
创建执行上下文时:

  • 绑定this(与执行上下文绑定)
  • 创建词法环境(函数、let和const定义的变量)
  • 创建变量环境(var定义的变量)

变量环境里有一个指向外部函数执行上下文的指针,形成了作用域链

闭包

内部函数引用外部函数的变量或参数。本质是一个没有被回收的对象

this

在全局作用域中,this指向全局对象。在浏览器中,全局对象是 window 对象
在函数中,this的指向取决于函数的调用方式。如果函数作为一个对象的方法被调用,那么this指向这个对象
如果函数不是作为对象的方法被调用,那么this指向全局对象
new 构造函数中的this指向新创建的对象
new操作符所做的:

  • 创建临时对象
  • 将this指向临时对象
  • 执行构造函数
  • 返回临时对象

事件循环

如何处理异步任务?
执行完同步代码后,先执行微任务队列(promise等),再执行宏任务队列(定时器、UI事件、IO等)


TypeScript

JS的超集;强类型,支持静态和动态类型;可以在编译期间发现并纠正错误;不允许改变变量的数据类型

使用泛型约束后端接口类型:

import axios from 'axios'

interface API {
  'book/detail' : {
    id : number,
  },
  'book/comment' : {
    id : number,
    comment : string
  }
} 

function request<T extends key of API> (url : T, obj : API[T]) {
  return axios.post(url, obj)
}

request('book/commnent', {
  id : 1,
  comment : 'very good!''
})