1.深拷贝和浅拷贝的区别
(1)深拷贝:B复制A,A变,B不变,一般基础数据类型
原因:基础数据类型的赋值,栈内存会开辟一个新的内存,存放值,修改a的值并不会改变b值
(2)浅拷贝:B复制A,A变,B变,引用数据类型
引用数据类型,栈内存存放地址,这个地址指向原堆内存的值。所以只要堆内存的值一变,大家都会变
2.function中this的指向
(1)在大环境全局范围内调用,this指向全局对象window
(2) 事件处理函数中,this指向事件源
(3)对象方法中,指向调用的对象
结果:
(4)构造函数中,this指向new出来的实例化对象
3、改变函数内部this指向的方法
(1)call()方法调用一个对象。调用函数,改变函数this的指向
fun.call(thisArg,arg1,arg2,....)thisArg是改变后this的指向
结果:
(2)apply()方法,调用函数改变函数内部this的指向
fun.call(thisArg,【args】)thisArg是改变后this的指向,参数必须是数组
apply()的应用,可以利用apply借助于数学对象求最大值
结果为:
(3)bin()方法,不会调用函数,但是能改变函数内部this的指向
fun.bin(thisArg,arg1,arg2....)thisArg为改变后的对象,arg1为传入的其他参数,返回的是原函数改变this之后产生的新函数
bin()方法的应用:函数不立即调用,又需要改变函数内部this的指向
4.var、let和const 的区别
(1)let/const新增了块级作用域{},var只有全局作用域与局部作用域(函数内部)
(2)var定义变量可以重复定义,let/const不可以
(3)var定义变量存在变量的默认提升,let/const不存在变量的提升
(4)var定义的变量会自动挂载到window对象上,作为window的属性,let/const不会
(5)let存在暂时性死区问题,只要是let定义的变量都不能提前使用,哪怕是全局有也不可以用
5、function函数与箭头函数的区别
箭头函数简写,有且只有一个参数,可以省略(),只有一个return语句,省略return和{}
区别1:function函数中this指向不明确,随环境变化而发生变化,箭头函数this的指向明确,永远指向函数的生产环境
区别2:function函数存在提升功能,箭头函数不存在
区别3:function函数可以作为构造函数,箭头函数由于this指向性明确,无法作为构造函数
区别4:function函数存在argument参数集合(保存所有实参),箭头函数没有,箭头函数的参数放到拓展运算符内(...args)
6.js如何实现私有属性
私有属性:必须通过方法才能访问和修改。
通过闭包,set()与get()方法设置与获取私有属性
闭包:指有权访问另一个函数作用域中变量的函数,一个函数访问了另外一个函数的局部变量
案例:设置用户的电话为私有属性