今天的码农女孩做了关于js的简答题
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的简答题相关推荐
- 今天的码农女孩做了关于svg画图和canvas画图 2022/1/18
svg和canvas画图 svg和canvas区别: svg:不依赖分辨率,不能嵌入图片和文字,不能通过事件操作,但是可以通过css执行动画,矢量图形,放大缩小不失真,渲染能力强,适合做图标,地图,动 ...
- 今天的码农女孩做了关于解决跨域的笔记
处理跨域: 在项目根目录下定义一个vue.config.js文件 在文件下定义代理的地址: module.exports={ devServer:{ proxy:{ ...
- 今天的码农女孩做了关于文件操作和文件拖拽的笔记 2022/1/21
文件操作和文件拖拽 文件操作: js有两种机制:一个是事件机制,一个是io机制 文件操作对象: Blob通过二进制数据读取 file读取单个文件对象 fileList读取多个文件对象 fileRead ...
- 为什么80%的码农都做不了架构师?
身为技术人,相信你也思考过这个问题:工作了几年,代码写得非常熟练,上线的程序也少有 bug ,时不时还能搞个技术分享,但接下来要往哪个方向发展呢? 想来无非是 3 种选择:专精技术.转型管理.晋升架构 ...
- 大龄码农适合做什么,比如40岁以上?
对于大龄码农,建议还是从事跟技术相关的工作,这样能有比较好的承接. 这个年龄进入体制内很难了(公务员超龄),可以考虑下面的一些方向: 1 兼职外包 相比个人,接单平台有更成体系的获客渠道,通常需求也更 ...
- 谁说码农不懂浪漫?(js写的'老婆生日快乐'特效)
一直被老婆抱怨不懂浪漫,老婆的生日又来了,老婆指着闺蜜空间上贴的老公做的胡萝卜心形浪漫晚餐告诉我:必须送她一份用心的礼物.我绞尽脑汁想出这么一法子,还是得用我们码农的独特方式,经过一天多的努力,终于做 ...
- 做了20年的老码农-历数做过的系统
我毕业于2002年,算来已经从事软件开发20年了,期间开发过一些有意思的系统,给网友们分享下. 1)2000~2002年,FLASH动画展示.在校期间,用VC开发了Flash动画展示软件.我将大学学习 ...
- 码农不得不做的P图辨识能力
本文说一下Adobe小游戏:25张照片考验你的P图辨识能力,下面开始详细说一下. 面对一些难以置信的照片,很多人第一反应都是"这一定是 PS 的",然而这其中不乏真照片.当然 ...
- 今天的码农女孩学习了关于jQuery中的文档处理的内容
文档处理 内添加(孩子) 1.append()在父类尾部添加孩子(新) 2.appendTo()在父类尾部添加孩子(指定) 3.prepend( ...
最新文章
- R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型
- MySqli 连接失败 MySQL connection not working: 2002 No such file or directory
- python最佳实践指南试题_Python最佳实践指南 阅读笔记
- 内存分析工具MAT介绍
- linux踩内存内存越界,Linux如何调试内存泄漏?超牛干货奉献给你(代码全)
- java 传入参数_Java 中方法参数的传递
- linux C++ 多进程初步02
- unity shader 编辑器扩展类 ShaderGUI
- np.stack()函数详解 ==>堆叠 【类似于torch.stack()】
- 第一篇 Windows 8 开发Windows Metro style app环境配置
- 拆分窗口QSplitter
- c/cpp中怎样切割字符串,相似于split的功能
- hihoCoder - 1075 开锁魔法III
- Java实现文件批量重命名
- C#中的DataGridView
- TK1装kuboki的USB驱动和TK1的无线网卡驱动
- 【Hive】Hive 建表语句详解
- hadoop基础【Shuffle全部流程、OutputFormat输出、ReduceJoin案例实操】
- 不能设置 19寸显示 屏分辨率为 1440*900 的神器到来了
- 9.无 线 网 络 和 移 动 网 络