记录一下前端面试中的涉及到的一些问题(JS)

谈谈你对原型、原型链的理解?

  • 每个构造函数一旦创建都有prototype指针指向它的原型对象,而原型对象会默认生成一个constructor指针又指向构造函数。

什么是闭包,在哪里用过闭包,闭包的使用场景是什么?

  • 闭包: 闭包就是能够读取其他函数内部变量的函数
  • 在哪使用闭包: 需要获取函数内部变量时
  • 闭包的使用场景: 闭包可以用在许多地方,他的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中

怎么实现继承?

  • 原型链继承: 将父类的实例作为子类的原型,继承父类方法
  • 构造函数: 利用call或者apply把父类中通过this指定的属性和方法复制(借用)到子类创建的实例中
  • 组合继承: 通过父类构造,继承父类的属性并保留传参的优点,然后在通过父类实例作为子类原型,实现函数复用

你对this的理解?

  • 作为纯粹的函数调用,this指向全局对象
  • 作为对象的方法调用,this指向调用对象
  • 作为构造函数被调用,this指向新的对象(new会改变this的指向)
  • apply调用,this指向apply方法的第一参数

改变this的指向?以及call、apply、bind三者的区别

  • call (无数个参数):  
  • 第一个参数 -> 改变this的指向

    第二个参数 -> 使用之后自动执行该函数

     

function fn(a,b,c){
        console.log(this,a+b+c); // this指向window
    }
    fn();
    fn.call(document,1,2,3);//call改变之后this指向document  
    //输出 #document 6   1,2,3是实参 结果相加为6

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

  • apply(两个参数)
  • 第一个参数:改变this指向
    第二个参数:数组(里面为实参)
    使用时候会自动执行函数
function fn(a,b,c){
        console.log(this,a+b+c); 
    }
    fn();
    fn.apply(document,[1,2,3]); 

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

  • bind(无数个参数)
  • 第一个参数:改变this指向
    第二个参数之后:实参
    返回值为一个新的函数
    使用的时候需要手动调用下返回 的新函数(不会自动执行)
function fn(a,b,c){
    console.log(this,a+b+c); //window
}
let ff = fn.bind('小明',1,2,3); //手动调用一下

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

JS数据类型有哪些?

  • object          undefined          boolean          string          namber          null

数组常用的方法?

  • 在这里可以说一些比较别人不经常说的,比方说:splice,join,map,filter等等,还有es6find,findIndex

数组方法那些会改变原数组?

  • shift:将第一个元素删除并且返回删除元素,空即为undefined
  • unshift:向数组开头添加元素,并返回新的长度
  • pop:删除最后一个并返回删除的元素
  • push:向数组末尾添加元素,并返回新的长度
  • reverse:颠倒数组顺序
  • sort:对数组排序
  • splice:splice(start,length,item)删,增,替换数组元素,返回被删除数组,无删除则不返回

什么是事件委托?

  • 事件委托就是利用事件冒泡,只指定一个父类元素绑定事件,就可以管理所有子类元素

事件委托的实际运用场景是什么?

  • Ajax局部刷新区域
  • 绑定层级比较低的时候,不在body上绑定
  • 定次数较少的时候,把多个事件绑定合并到一次事件委托中,由这个事件委托的回调,来进行分发

怎么理解js的单线程问题?

  • js本身是单线程的,浏览器有个概念叫执行队列
  • js需要先将自己加入到执行队列中由浏览器来解析,但是执行队列时允许部分元素或者说是对象插队的,比如ajax。于是就形成了js的单线程,但是看起来像是多线程的
  • 这里一般会出一些同步和异步的面试题    
  • console.log(111);
    setTimeout(function(){
    console.log(222)
    },1000); 
    console.log(333)  
    这段代码的结果,为什么结果是这样子的,这段代码的结果是,111,333,222.如果要改成按照顺序执行,111,222,333怎么改进,这个思路是Promise()

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值