前端面试题

1丶class类继承
下面用代码给大家演示:

class Stutent {
  constructor(name, age) {
    this.name = name;
    this.age = age;
    this.eat = function(){
      return (`姓名:${this.name},年龄:${this.age}`)
   }
  }
}

class Teacher extends Stutent {
  constructor(name, age, run) {
    super(name, age);
    this.run = run;
  }
}

let Wang = new Teacher("小王", 24,"跑");

console.log(Wang.name)
console.log(Wang.age)
console.log(Wang.run)
console.log(Wang.eat())

2丶原型和原型链
原型
1. prototype
每个函数都有一个prototype属性,被称为显示原型
2._ proto _
每个实例对象都会有_ proto 属性,其被称为隐式原型
每一个实例对象的隐式原型
proto _属性指向自身构造函数的显式原型prototype
原型链
当一个对象调用自身不存在的属性和方法时就回去自己的proto的前辈prototype对象上去找。
如果没找到就会去prototype的前辈上去找 直到找到或者返回undefiend 这个链式查找的过程就是原型链。
3丶原型三角关系
在这里插入图片描述

  • prototype:指向原型对象(函数特有属性)

  • proto:指向构造该对象的构造函数的原型对象

  • constructor:指回该原型对象中的构造函数
    5丶全局作用域和局部作用域
    在这里插入图片描述

  • js中首先有一个最外层的作用域,全局作用域;

  • js中可以通过函数来创建一个独立作用域称为函数作用域,函数可以嵌套,所以作用域也可以嵌套;

  • 块级作用域(大括号,比如:if{},for(){},while(){}…)
    6丶闭包
    什么是闭包?
    在javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。闭包是指有权访问另一个函数作用域中的变量的函数。其本质是函数的作用域链中保存着外部函数变量对象的引用。
    闭包的应用场景:

  • 函数作为参数被传递

  • 函数作为返回值被返回

  • 函数防抖、函数节流

// 函数作为返回值
        function create(){
            let a = 200
            return function(){
                console.log(a);
            }
        }
        let fn = create()
        let a = 300
        fn() //200
        // 函数作为参数被传出去
        function print(fn){
            let a = 500
            fn()
        }
        let a = 200
        function fn(){
            console.log(a);
        }
        print(fn)//200

闭包的优点:

  • 变量长期驻扎在内存中
  • 另一个就是可以重复使用变量,并且不会造成变量污染
    闭包的缺点
    由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。
    解决方法是,在退出函数之前,将不使用的局部变量全部删除。
    7丶this指向问题?
  • 如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window。
function a(){
    var user = "子";
    console.log(this.user); //undefined
    console.log(this);  //Window
}
window.a();
  • 如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。
var o = {
    user:"子",
    fn:function(){
        console.log(this.user);  //子
    }
}
o.fn();
  • 如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象。
var o = {
    a:100,
    b:{
        a:200,
        fn:function(){
            console.log(this.a); //200
        }
    }
}
o.b.fn();

总结:
普通函数中调用,this指向window
对象方法中调用,this指向当前对象
call apply bind中调用, this指向被传入的对象
class中的方法中调用, this指向实例对象
箭头函数,this就是父级上下文中的this。
8丶什么是宏任务和微任务
在这里插入图片描述

宏任务包括:setTimeout setInterval Ajax DOM事件
微任务:Promise async/await
微任务比宏任务的执行时间要早

9丶异步和单线程
异步和单线程是相辅相成的,js是一门单线程脚本语言,所以需要异步来辅助。
异步和同步的区别:

  • 异步不会阻塞程序的执行,
  • 同步会阻塞程序的执行,
    异步场景
  • 定时器
  • 网络请求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值