Fork me on GitHub

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

前端知识整理

基础对象指原型链终点的对象。基础对象的原型是null

默认情况下,事件处理程序在冒泡阶段执行(除非您将useCapture设置为true)

JavaScript中只有6个假值:undefined 、 null 、NaN 、0 、'' (empty string) 、false

闭包,外层函数执行完毕后会被销毁,但内部的函数会继续保存到内存中,且变量引用不会变
柯里化(Currying)是把接受多个参数的函数转变为单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。
原理: 1.通过闭包管理 2.支持链式调用 3.每次运行返回一个 function

function add () {
  const numberList = Array.from(arguments);
  // 进一步收集剩余参数
  const calculate = function() {
    numberList.push(...arguments);
    return calculate;
  }
  // 利用 toString 隐式转换,最后执行时进行转换
  calculate.toString = function() {
    return numberList.reduce((a, b) => a + b, 0);
  }
  return calculate;
}
// 实现一个 add 方法,使计算结果能够满足以下预期 , 并不能直接输出,仍然得借助 toString 隐式转换
console.log(add(1)(2)(3)); // 6
console.log(add(1, 2, 3)(4)); // 10;
console.log(add(1)(2)(3)(4)(5)); // 15;

---------------变量------------------

作用域:全局/函数作用域 预解析:由于从代码上来说并不能直接决定一些代码的结构(如位置、覆盖重写),所以需要预解析成固定的状态(类似于webpack打包) var:需要预解析,相应的可以重复声明:覆盖 全局/函数作用域 let:无需预解析,同一作用域不可重复声明: 全局/函数作用域/{} <-> for/while/if 外部已用let/const定义,内部不准再定义 const : 类似let + 初始化必须赋值 、且后面不允许更改

类型

var tmp = 123;
if (true) {
      tmp = 'abc'; // referrenceError, 暂时性死区:在作用域内,使用 let/const 声明变量之前,该变量都是不可用的,所以叫 “暂时性死区”。
      let tmp;  }

ES5 中只有全局作用域和函数作用域 , 缺点:

  1. 内层变量覆盖外层变量
  2. 循环的变量泄露为全局变量
    ES5 块级作用域解决方案 (function() {})()
    ES6 块级作用域界定方案 { 含中括号即可 }

函数提升:使代码可以自下而上去执行 / 变量提升:声明会前置

var foo = 3;
function getFoo() {
  var foo = foo || 5;
  console.log(foo); // 输出 5  }
getFoo();
// 函数是一等公民 , 上述程序预解析后 -->
function getFoo() {
  var foo;
  foo = foo || 5;
  console.log(foo);  }
var foo;
foo = 3;
getFoo();

判断变量类型:

  1. typeof(variable)
  2. variable instanceof Array
  3. variable.constructor = Array
  4. Object.prototype.toString.call(variable)

--------------多线程------------------

---------------this------------------

缺点:嵌套函数的this不会从外层函数中继承,需要用 that 控制 this 指向 / 或通过ES6 箭头函数 来控制指向

---------------http请求----------------

1:处理中,101升级为web socket

200 OK:请求成功状态码,响应体中含有数据。
204 No Content:含义同 200,但是响应报文不含实体的主体部分。
206 Partial Content

301 Move Permanently
302 Move templateLy
304 有缓存

400 Bad Request 请求无效
403 Forbidden 拒绝执行,无权限
404 资源未找到

500 服务器出错
503 服务器繁忙

---------------浏览器缓存----------------

  • Service Worker
  • Memory Cache
  • Disk Cache
  • Push Cache

---------------回流和重绘----------------

回流一定触发重绘,重绘不一定触发回流 1. 解析 HTML,生成 DOM 树 2. 解析 CSS,生成 CSS 规则树(CSS Rule Tree) 3. 将 DOM Tree 和 CSS Rule Tree 相结合,生成 渲染树(Render Tree) 4. 从根节点开始,计算每一个元素的大小、位置,给出每个节点所应该出现的屏幕精确坐标,从而得到基于渲染树的 布局渲染树(Layout of the render tree)。 5. 遍历渲染树,将每个节点用 UI 渲染引擎来绘制,从而将整棵树绘制到页面上,这个步骤叫 绘制渲染树(Painting the render tree)


暂时性死区:使用 let 声明变量后,在该变量绑定的作用域(全局/函数/块级作用域)内,在变量之前无法操作变量,referenceError

posted @ 2021-05-09 11:15  365/24/60  阅读(64)  评论(0编辑  收藏  举报