web前段JS面试题

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()方法设置与获取私有属性 

闭包:指有权访问另一个函数作用域中变量的函数,一个函数访问了另外一个函数的局部变量

案例:设置用户的电话为私有属性

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值