Js 高级

浏览器的工作原理

当打开一个网站时,为了渲染出网站上的内容,需要做以下几个事情:

1.下载html

2.在下载html的过程中,下载css和js

3.下载完js之后,会停止解析html,去加载js代码,再由js引擎将代码转成机器语言(也就是01010),另一种方法是经过Parse变成AST(抽象语法树),再变成ignation,最后变成字节码,然后变成机器语言

预解析

初始化全局对象:

声明>

执行顺序:声明>函数体>赋值>调用>函数内部的变量提升

当我们查找一个变量时,真实的查找路径是沿着作用域链来查找的

 遇到函数如何执行

打印: 20

 打印: 10

打印: undefined

 打印: 200 

打印: undefined 200

 打印: undefined 10 

 打印: a is not defined

注意:上面这个只是在函数中声明的,不会提升到全局变量中

而下面这个函数

  打印:20

这两个函数的区别:var和不加var的区别:不加var是变量赋值,并且这个变量变成了全局变量的一个属性

var num = 1 跟 num = 1,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,因此可以从全局变量中删除。

查找变量路径按照作用域(存放父级作用域以及函数体)

GO:全局对象 : 全局代码执行之前创建GO

AO:活跃对象 : 函数执行之前创建

VO:变量对象 :存放父级作用域以及函数体

VO->GO (全局执行上下文的时候)

VO->AO (函数执行的时候也就是被调用的时候,对函数里面的代码进行编译)

如果在执行上下文的时候,发现变量是一个函数,首先创建一个存储函数空间(也就是函数对象),存储函数空间里面包括父级作用域和函数体,并且给存储函数空间分配一个地址,这个地址指向GO的变量,在函数执行上下文的过程中,VO:AO,因此创建一个AO,里面先声明变量,在执行上下文的过程中,赋值给变量,当之中有函数的时候,再创建一个函数对象出来

 

 

 内存管理

JavaScript会在定义变量时为我们分配内容

js对于基本数据类型内存的分配(像number、string等)会在执行时,直接在栈空间进行分配

js对于复杂数据类型内存的分配(像对象、数组)会在堆内存中开辟一块空间,并且将这块空间的指针返回值变量引用

函数作为参数的使用

 

上面这个函数相当于把foo这个函数的返回值返回给了fn,让fn接收返回值

高阶函数:是把一个函数如果接受另外一个函数作为参数,或者该函数会返回另外一个函数作为返回值的函数,那么这个函数就叫高阶函数

 函数:独立的function

方法:当我们的一个函数属于某一个对象时,这个函数就是这个对象的方法

闭包

闭包和函数最大的区别:当捕捉闭包的时候,他的自由变量会在捕捉时被确定,这样即使脱离了上下文也会被执行

 

 

闭包由两部分组成的:函数+可以访问的自由变量

 执行过程(GO、AO、VO)


JavaScript的执行过程(深入执行上下文、GO、AO、VO和VE等概念)_qq_43479892的博客-CSDN博客_js执行过程



this

this的绑定和定义的位置没有关系,跟调用的方式和调用的位置有关

默认绑定

  打印:window

  打印:window 

 隐式绑定

显式绑定

显式绑定 - call和apply

call和apply的区别

第一个参数都可以用来指向某一个东西

 显示绑定 - bind

 

优先级

  注意:如果语句中有以括号开始的语句,需要在上一个语句中加分号 

箭头函数 

箭头函数不适用于上面的所有规则,直接找上层作用域

前端面试之彻底搞懂this指向

上面的链接后面自带面试题

 题目与解析:

 剩余运算符和扩展运算符

当三个点(…)在等号左边,或者放在形参上,为 rest 运算符

当三个在等号右边,或者放在实参上,是 spread运算符

rest参数是一个真正的数组,argument对象不是一个真正的数组

argument

 array.from()

JavaScript Array.from 详解_淮城一只猫 - iiong.com的博客-CSDN博客

柯里化

个人理解:拆成多个返回值,然后多次调用

formal

对象

 

 

 存取属性描述符

原型

就是说

function P{

}

var p = new P()

p 对象.__proto__和 P 函数.prototype都指向原型对象同一个原型对象

如果 还有一个函数M也是如上的代码的话

M 函数.prototype = 对象p

则M函数的prototype指向p的__proto__

 

 可以在student中的prototype中找到函数

继承

 

 

es6

var、let和const

 

 

 

 

symbol

 

 

set

map

 

flat

 

 Object.defineProperty

promise

纯回调函数在传递回调函数和异步操作之前必须定义回调函数,但promise把异步和回调拆开了,可以先拿到异步任务执行的结果,再决定拿到结果之后做什么

promise灵活性,即在取得结果后,可以不用立即处理。

resolve方法

finally

 allSettled

race

 

any 

 手写promise

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值