1.什么是闭包?有什么特点?

闭包是能够有权访问其他函数内部的私有变量的函数

是指有权访问另一个函数的作用域中的变量的函数,可以提升变量

优点:在页面加载时在内存中存在,调用速度快,并闭包的变量也会始终保存在内存中

缺点:造成内存消耗过大,页面性能降低,需要手动清空才能释放内存

闭包的表现形式:函数的嵌套,递归,匿名函数等。

特点:访问私有变量,变量不被销毁,用于封装

2.new关键字都做了什么

(1)创建一个新对象

(2)将构造器的作用域赋给新对象

(3)用this关键字指向这个对象

(4)通过proto寻找父类对象

(5)返回新对象给调用者

3.js的数据类型有哪些

基本类型:数字(number),字符串(string),布尔(boolean),空(null undefined)

引用类型:对象/引用(object)

4.0.1+0.2为什么不等于0.3

丢失精度问题

在小数执行运算时,也需要转化成二进制数,被转化的0.1和0.2为32位循环二进制

在做运算则返回的也是循环32位的0.3,就丢失了精度

5.深拷贝和浅拷贝的区别

深拷贝:两个变量复制,引用的是不同的堆内存机制

浅拷贝:两个变量复制,引用的是一个堆内存机制

深拷贝和浅拷贝的使用场景是在复杂对象里,即对象的属性还是对象,

浅拷贝是指只复制一层对象,当对象的属性是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化

浅拷贝的方法

// 只复制第一层的浅拷贝

function simpleCopy(obj1) {

var obj2 = Array.isArray(obj1) ? [] : {};

for (let i in obj1) {

obj2[i] = obj1[i];

}

return obj2;

}

var obj1 = {

a: 1,

b: 2,

c: {

d: 3

}

}

var obj2 = simpleCopy(obj1);

obj2.a = 3;

obj2.c.d = 4;

深拷贝的方法

function deepClone(obj){

let objClone = Array.isArray(obj)?[]:{};

if(obj && typeof obj==="object"){

for(key in obj){

if(obj.hasOwnProperty(key)){

//判断ojb子元素是否为对象,如果是,递归复制

if(obj[key]&&typeof obj[key] ==="object"){

objClone[key] = deepClone(obj[key]);

}else{

//如果不是,简单复制

objClone[key] = obj[key];

}

}

}

}

return objClone;

}

let a=[1,2,3,4],

b=deepClone(a);

a[0]=2;

console.log(a,b);

6.谈谈你理解的this关键字

全局下this指向window

对象操作下,点前面是谁,this就指向谁,没有指向window

匿名函数指向window

Dom元素绑定事件,指向当前dom对象

7.什么是变量提升

变量提升也叫域解释,在js代码没有执行之前,在内存中,var会先声明,而function声明和定义都完成了

8.js内存回收机制是什么

引用计数:每次变量被引用则数值加1,赋值给其他变量,或不引用数值-1,则到0为止进行回收

标记清除:当变量被引用,则标注进入环境,变量不使用标注离开环境,js回收机制,检测到离开环境就回收

9.什么情况下js内存不会回收呢?

全局变量不会回收

闭包引用的变量不会回收

有栈内存引用堆内存的地址不被回收

今天的码农女孩做了关于js的简答题相关推荐

  1. 今天的码农女孩做了关于svg画图和canvas画图 2022/1/18

    svg和canvas画图 svg和canvas区别: svg:不依赖分辨率,不能嵌入图片和文字,不能通过事件操作,但是可以通过css执行动画,矢量图形,放大缩小不失真,渲染能力强,适合做图标,地图,动 ...

  2. 今天的码农女孩做了关于解决跨域的笔记

    处理跨域: 在项目根目录下定义一个vue.config.js文件 在文件下定义代理的地址: module.exports={     devServer:{         proxy:{       ...

  3. 今天的码农女孩做了关于文件操作和文件拖拽的笔记 2022/1/21

    文件操作和文件拖拽 文件操作: js有两种机制:一个是事件机制,一个是io机制 文件操作对象: Blob通过二进制数据读取 file读取单个文件对象 fileList读取多个文件对象 fileRead ...

  4. 为什么80%的码农都做不了架构师?

    身为技术人,相信你也思考过这个问题:工作了几年,代码写得非常熟练,上线的程序也少有 bug ,时不时还能搞个技术分享,但接下来要往哪个方向发展呢? 想来无非是 3 种选择:专精技术.转型管理.晋升架构 ...

  5. 大龄码农适合做什么,比如40岁以上?

    对于大龄码农,建议还是从事跟技术相关的工作,这样能有比较好的承接. 这个年龄进入体制内很难了(公务员超龄),可以考虑下面的一些方向: 1 兼职外包 相比个人,接单平台有更成体系的获客渠道,通常需求也更 ...

  6. 谁说码农不懂浪漫?(js写的'老婆生日快乐'特效)

    一直被老婆抱怨不懂浪漫,老婆的生日又来了,老婆指着闺蜜空间上贴的老公做的胡萝卜心形浪漫晚餐告诉我:必须送她一份用心的礼物.我绞尽脑汁想出这么一法子,还是得用我们码农的独特方式,经过一天多的努力,终于做 ...

  7. 做了20年的老码农-历数做过的系统

    我毕业于2002年,算来已经从事软件开发20年了,期间开发过一些有意思的系统,给网友们分享下. 1)2000~2002年,FLASH动画展示.在校期间,用VC开发了Flash动画展示软件.我将大学学习 ...

  8. 码农不得不做的P图辨识能力

     本文说一下Adobe小游戏:25张照片考验你的P图辨识能力,下面开始详细说一下. 面对一些难以置信的照片,很多人第一反应都是"这一定是 PS 的",然而这其中不乏真照片.当然 ...

  9. 今天的码农女孩学习了关于jQuery中的文档处理的内容

    文档处理     内添加(孩子)         1.append()在父类尾部添加孩子(新)         2.appendTo()在父类尾部添加孩子(指定)         3.prepend( ...

最新文章

  1. R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型
  2. MySqli 连接失败 MySQL connection not working: 2002 No such file or directory
  3. python最佳实践指南试题_Python最佳实践指南 阅读笔记
  4. 内存分析工具MAT介绍
  5. linux踩内存内存越界,Linux如何调试内存泄漏?超牛干货奉献给你(代码全)
  6. java 传入参数_Java 中方法参数的传递
  7. linux C++ 多进程初步02
  8. unity shader 编辑器扩展类 ShaderGUI
  9. np.stack()函数详解 ==>堆叠 【类似于torch.stack()】
  10. 第一篇 Windows 8 开发Windows Metro style app环境配置
  11. 拆分窗口QSplitter
  12. c/cpp中怎样切割字符串,相似于split的功能
  13. hihoCoder - 1075 开锁魔法III
  14. Java实现文件批量重命名
  15. C#中的DataGridView
  16. TK1装kuboki的USB驱动和TK1的无线网卡驱动
  17. 【Hive】Hive 建表语句详解
  18. hadoop基础【Shuffle全部流程、OutputFormat输出、ReduceJoin案例实操】
  19. 不能设置 19寸显示 屏分辨率为 1440*900 的神器到来了
  20. 9.无 线 网 络 和 移 动 网 络

热门文章

  1. 桌面自动化---PyAutoGUI
  2. Python3 Selenium+ChromeDriver抓取动态网页
  3. 推荐一部很好的电影《本杰明.巴顿的奇事》
  4. 八大安防设备成高考防作弊神器
  5. 代码生成器更新:集成redis单点登录,支持SpringCloud生成
  6. 华为OpenEuler体验系列(01)--制作BIOS、UEFI双启动盘
  7. Introduce C
  8. 填资料领“红包”是骗局?|频繁查询征信记录是否对征信信用有影响?
  9. 王石接受访问 建议40岁之前不买房先租房
  10. FCKeditor WEB在线编辑器配置手册