2021-01-13 前端总结

2021-01-13  本文已影响0人  rub1cky

let、const、var的使用区别

1.var定义变量,没有块的概念,可以跨块访问,不能跨函数访问,不初始化出现undefined,不会报错。

2.let定义变量,只能在块作用域里访问,也不能跨函数访问,对函数外部无影响。

3.const定义常量,只能在块作用域里访问,也不能跨函数访问,使用时必须初始化(即必须赋值),而且不能修改。

变量提升和函数提升

Map与普通对象的区别

JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

外部函数调用之后其变量对象本应该被销毁,但闭包的存在使我们仍然可以访问外部函数的变量对象

输入一个网址,直到网址打开并加载结束,这个过程浏览器发生了什么

查看浏览器中是否有缓存,有的话直接访问缓存

如果缓存过期或者没有缓存,重新请求

在发送http请求前,需要域名解析,获取相应的IP地址

浏览器想服务器发起tcp链接,与浏览器建立tcp三次握手

握手成功后,浏览器向服务器发送http请求,请求数据包

服务器处理收到的请求,将数据返回至浏览器

浏览器收到HTTP响应

读取页面内容,浏览器渲染,解析html源码

rem是根据根的font-size变化,而em是根据父级的font-size变化

基本数据类型:number,string,null,undefined,boolean,symbol,bigInt

引用数据类型: object

call,apply,bind的作用区别

作用:用来改变函数this指向

相同处:第一个参数都是this要指向的对象

区别一:call()和apply()都是对函数的直接地调用,而bind()本身返回一个函数,后面还需要()进行调用

区别二:call()和bind()传参可以一个一个传入,但是apply()要以数组格式传参

bind 函数

Function.prototype.bind = function() {
  var self = this;
  var context = Array.prototype.shift.call(arguments)
  var args = Array.prorotype.slice.call(arguments)
  return function() {
    self.apply(context, Array.prototype.concat.call(args, Array.prorotype.slice.call(arguments)))
  }
}

js调用机制

具体运行机制可以理解为,当主线程的异步函数在被调用的时候,会请求工作线程的帮助。工作线程接收这个任务并执行。主线程可以继续运行后面的函数,而不必阻塞在这。

浏览器线程

BFC(Block formatting context)直译为"块级格式化上下文"

内部的Box会在垂直方向,一个接一个地放置。

Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。

每个盒子(块盒与行盒)的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。

BFC的区域不会与float box重叠。

BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。

计算BFC的高度时,浮动元素也参与计算。

如何创建BFC

1、float的值不是none。

 2、position的值不是static或者relative。

 3、display的值是inline-block、table-cell、flex、table-caption或者inline-flex

 4、overflow的值不是visible

BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素

箭头函数

箭头函数相当于匿名函数, 不绑定this、没有prototype属性、不绑定arguments
this 是指向词法作用域,由上下文确定

Array

# 改变原数组的方法
pop, push, shift. unshift, sort, reverse, splice
# 不改变原数组的方法
concat, valueOf, join, slice,lastIndexOf, toLocaleString // 返回新数组

词法作用域和动态作用域

// 词法作用域
function foo() {
  console.log(a) //2
}

function bar() {
  var a = 3
  foo()
}
var a = 2
bar()
// 动态作用域
function foo() {
  console.log(a) //3
}

function bar() {
  var a = 3
  foo()
}
var a = 2
bar()
上一篇 下一篇

猜你喜欢

热点阅读