前端面试 -- JavaScript

  1. JS由哪三部分组成?

    ① ECMAScript:JS的核心内容,描述了语言的基础语法,比如var,for,数据类型(数组、字符串)

    ② 文档对象模型(DOM):DOM把整个HTML页面规划为元素构成的文档

    ③ 浏览器对象(BOM):对浏览器窗口进行访问和操作

  2. JS有哪些内置对象?
    String 、Boolean 、Number 、Array 、Object 、Funtion 、Math 、Date、RegExp…

    Math:abs()、sqrt()、max()、min()

    Date:new Date() 、 getYear()

    String:concat()、length 、 slice() 、 split()

  3. 操作数组的方法有哪些?(加粗部分方法会改变原数组)
    push()pop()sort()、splice()、unshift()shift()reverse()、concat()、join()、map()、filter()、ervery()、some()、reduce()、isArray()、findIndex()

  4. JS对数据类的检测方式有哪些?

    typeof():对于基本数据类型没问题,遇到引用数据类型就不管用

    instanceof():只能判断引用数据类型,不能判断基本数据类型

    constructor:几乎可以判断基本数据类型和引用数据类型;如果声明了一个构造函数,并把它的原型指向了Array

    eg:('abc').constructor === String
    

    Object.prototype.toString.call():完美解决方案

  5. 说一下闭包,闭包有什么特点?

    ① 函数嵌套函数,内部函数被外部函数返回并保存下来时,就会产生闭包

    ② 特点:可以重复利用变量,并且这个变量不会污染全局的一种机制:这个变量是一直保存在内存中,不会被垃圾回收机制回收

    ③ 缺点:闭包使用较多的时候会消耗内存,导致页面的性能下降,在IE浏览器中才会导致内存泄漏

    ④ 使用场景:防抖,节流,函数嵌套函数避免全局污染的时候

  6. 前端内容泄露怎么理解?
    JS中已经分配内存地址的对象,但是由于长时间没有释放或者没办法清除,造成长期占用内存的现象,会让内存资源大幅度浪费,最终导致运行速度慢,甚至崩溃的情况。
    原因:垃圾回收机制
    因素:一些为生命直接赋值的变量;一些未清空的定时器;过度的闭包;一些引用元素没有被清除。

  7. 事件委托是什么?
    又叫事件代理,原理就是利用了事件冒泡的机制来实现,也就是说把子元素的事件绑定到了父元素的身上。
    如果子元素组织了事件冒泡,那么委托也就不成立。
    组织事件冒泡:event.stopPropagation()
    addEventListener(‘click’,函数名,true/false)默认是false(事件冒泡),true(事件捕获)
    好处:提高性能,减少事件的绑定,也就减少了内存的占用。

  8. 基本数据类型和引用数据类型的区别?
    ①基本数据类型:String、Number、Boolean、undefined、null
    基本数据类型保存在栈内存当中,保存的就是一个具体的值

    ②引用数据类型(复杂数据类型):Object、Function、Array
    保存在堆内存当中,声明一个引用类型的变量,它保存的是引用类型数据的地址
    假如声明两个引用类型同时指向了一个地址的时候,修改其中一个那么另一个也会改变

  9. 说一下原型链
    原型就是一个普通对象,它是为构造函数的实例共享属性和方法;所有实例中引用的原型都是同一个对象
    使用prototype可以把方法挂在原型上,内存值保存一份
    __proto__可以理解为指针,示例对象中的属性和方法的时候,会依次从实例本身、构造函数原型、原型的原型上去查找

  10. new操作符具体做了什么?
    1)先创建一个空对象
    2)把空对象和构造函数通过原型链进行链接
    3)把构造函数的this绑定到新的空对象身上
    4)根据构建函数返回的类型判断,如果是值类型,则返回对象,如果是引用类型,就要返回这个引用类型

  11. JS是如何实现继承的?
    ①原型链继承
    ②借用构造函数继承
    ③组合式继承
    ④ES6的class类继承

  12. JS的设计原理是什么?
    JS引擎、运行上下文、调用栈、事件循环、回调

  13. JS中关于this指向的问题
    ①全局对象中的this指向:window
    ②全局作用域或者普通函数中的this:全局window
    ③this永远指向最后调用它的那个对象(在不是箭头函数的情况下)
    ④new关键字改变了this的指向
    ⑤apply,call,bind可以改变this指向,不是箭头函数
    ⑥箭头函数中的this:它的指向在定义的时候就已经确定了;箭头函数它没有this,看外层是否有函数,有就是外层函数的this,没有就是window
    ⑦匿名函数中的this:永远指向了window,匿名函数的执行环境具有全局性,因此this指向window

  14. script标签里的async和defer有什么区别?
    当没有async和defer这两个属性的时候,浏览器会立刻加载并执行指定的脚本;
    有async:加载和渲染后面元素的过程将和script的加载和执行并行进步(异步);
    有defer:加载和渲染后面元素的过程将和script的加载并行进行(异步),但它的执行事件要等所有元素解析完成之后才会执行

  15. setTimeout最小执行时间是多少?
    HTML5规定:setTimeout最小执行时间是4ms;setInterval最小执行时间是10ms

  16. ES6和ES5有什么区别?
    JS的组成:ECMAScript+BOM+DOM
    ES5:ECMAScript5,2009年ECMAScript的第五次修订,ECMAScript2009
    ES6:ECMAScript6,2015年ECMAScript的第六次修订,ECMAScript2015,是JS的下一个版本标准

  17. ES6的新特性有哪些?

  18. call,aply,blind三者有什么区别?

  19. 用递归的时候有没有遇到什么问题?

  20. 如何实现一个深拷贝?

  21. Ajax是什么?怎么实现的?

你可能感兴趣的:(前端面试,前端,javascript,面试)