前端必懂概念,你会了吗?
xjj前端妹_雅
发布于 2022-6-13 15:06
浏览
0收藏
执行栈和执行上下文
1.什么是作用域,什么是作用域链?⭐⭐⭐⭐
规定变量和函数的可使用范围称作作用域
每个函数都有一个作用域链,查找变量或者函数时,需要从局部作用域到全局作用域依次查找,这些作用域的集合称作作用域链。
2.什么是执行栈,什么是执行上下文?⭐⭐⭐⭐
执行上下文分为:
- 全局执行上下文
- 创建一个全局的window对象,并规定this指向window,执行js的时候就压入栈底,关闭浏览器的时候才弹出
- 函数执行上下文
- 每次函数调用时,都会新创建一个函数执行上下文
- 执行上下文分为创建阶段和执行阶段
- 创建阶段:函数环境会创建变量对象:arguments对象(并赋值)、函数声明(并赋值)、变量声明(不赋值),函数表达式声明(不赋值);会确定this指向;会确定作用域
- 执行阶段:变量赋值、函数表达式赋值,使变量对象编程活跃对象
- eval执行上下文
执行栈:
- 首先栈特点:先进后出
- 当进入一个执行环境,就会创建出它的执行上下文,然后进行压栈,当程序执行完成时,它的执行上下文就会被销毁,进行弹栈。
- 栈底永远是全局环境的执行上下文,栈顶永远是正在执行函数的执行上下文
- 只有浏览器关闭的时候全局执行上下文才会弹出
闭包
1.什么是闭包?闭包的作用?闭包的应用?⭐⭐⭐⭐⭐
函数执行,形成私有的执行上下文,使内部私有变量不受外界干扰,起到保护和保存的作用。
作用:
- 保护
- 避免命名冲突
- 保存
- 解决循环绑定引发的索引问题
- 变量不会销毁
- 可以使用函数内部的变量,使变量不会被垃圾回收机制回收
应用:
- 设计模式中的单例模式
- for循环中的保留i的操作
- 防抖和节流
- 函数柯里化
缺点:
- 会出现内存泄漏的问题
原型和原型链
1.什么是原型?什么是原型链?如何理解⭐⭐⭐⭐⭐
原型: 原型分为隐式原型和显式原型,每个对象都有一个隐式原型,它指向自己的构造函数的显式原型。每个构造方法都有一个显式原型。
- __proto__是隐式原型;prototype是显式原型
- 所有实例的__proto__都指向他们构造函数的prototype
- 所有的prototype都是对象,自然它的__proto__指向的是Object()的prototype
- 所有的构造函数的隐式原型指向的都是Function()的显示原型
- Object的隐式原型是null
原型链: 多个__proto__组成的集合成为原型链(概念类似于作用域链)
- instanceof 就是判断某对象是否位于某构造方法的原型链上。
继承
1.说一说 JS 中的常用的继承方式有哪些?以及各个继承方式的优缺点。⭐⭐⭐⭐⭐
原型继承、组合继承、寄生组合继承、ES6的extend
原型继承
组合继承
寄生组合继承
extend
内存泄露、垃圾回收机制
1.什么是内存泄漏⭐⭐⭐⭐⭐
内存泄露是指不再用的内存没有被及时释放出来,导致该段内存无法被使用就是内存泄漏。
2.为什么会导致的内存泄漏⭐⭐⭐⭐⭐
内存泄漏指我们无法在通过js访问某个对象,而垃圾回收机制却认为该对象还在被引用,因此垃圾回收机制不会释放该对象,导致该块内存永远无法释放,积少成多,系统会越来越卡以至于崩溃。
3.垃圾回收机制都有哪些策略?⭐⭐⭐⭐⭐
- 标记清除法
- 垃圾回收机制获取根并标记他们,然后访问并标记所有来自它们的引用,然后在访问这些对象并标记它们的引用…如此递进结束后若发现有没有标记的(不可达的)进行删除,进入执行环境的不能进行删除
- 引用计数法
- 当声明一个变量并给该变量赋值一个引用类型的值时候,该值的计数+1,当该值赋值给另一个变量的时候,该计数+1,当该值被其他值取代的时候,该计数-1,当计数变为0的时候,说明无法访问该值了,垃圾回收机制清除该对象
- 缺点:当两个对象循环引用的时候,引用计数无计可施。如果循环引用多次执行的话,会造成崩溃等问题。所以后来被标记清除法取代。
深拷贝和浅拷贝
1.手写浅拷贝深拷贝⭐⭐⭐⭐⭐、
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
引用本文链接:https://blog.csdn.net/qq_33277654/article/details/122924692
引用作者:晟小明
引用文章来源:CSDN博客
已于2022-6-13 15:40:46修改
赞
3
收藏
回复
3
3
相关推荐
忘了可以回来在看看
可以,打好基础很重要!
大佬出品实用性很强,学到了