1.问:什么是匿名函数?作用是什么?
答:没有名字的函数就是匿名函数,作用有三,把函数当作变量赋值,把函数当作参数(回调函数),把函数当作另一个函数的返回值(闭包)
2.什么是回调函数?为什么需要回调函数?
答:一个被当作函数参数的函数,在不打开第三方函数的情况下实现完整功能,就需要回调函数
3.什么是立即执行函数?为什么需要立即执行函数?
答:此概念只针对匿名函数,即函数在定义阶段就可以直接运行,当我们希望一个函数只执行一次,执行完之后立马销毁,就需要立即执行函数了
4.立即执行函数的写法
(function (){}())
(function (){})()
5.什么是作用域链?
答:父子函数嵌套时,不同变量在不同作用域的使用权限就是作用域链,子函数可以访问父函数的所有变量,父函数无法访问子函数的变量
6.什么是闭包?为什么需要闭包?
答:函数嵌套函数就是闭包,被嵌套的函数叫闭包函数,全局变量会破坏函数的独立性,既要实现功能又不能破坏函数独立性,就需要闭包
7.简述闭包的写法
父函数嵌套子函数,在父函数内部声明局部变量,子函数操作该局部变量并return,将子函数作为父函数的返回值,在全局声明变量接收该返回值,就形成了闭包
8.闭包的作用是什么?
函数外部可以返回函数内部的变量,实现属性私有化和模块化开发
9.闭包的缺陷是什么?
闭包会延长局部变量的生命周期,打破垃圾回收机制,大量使用闭包会导致内存泄漏
10.什么是柯里化函数?柯里化的核心思想是什么?
答:一个函数,只有一个参数,并且返回值是一个函数的函数。对函数参数的自由处理,让函数更加灵活,降低了通用性,提升了特定性
11.什么是this?作用是什么?分几种情况?
答:this是函数对象的内置对象,其作用域在函数内部。
this出现在事件体内,指向触发该事件的元素本身
this出现在普通函数内(除了事件体和构造函数),代表调用该方法的元素本身
this出现在构造函数内,指向new出来的空间
this出现在箭头函数内,指向其父级的前缀
12.什么是类?什么是对象?
答:类是将具有相同属性和行为的对象归纳为一个类型,是一个模板,抽象不存在的;对象是类的实例化,携带了类的属性和方法,真实存在且唯一
13.什么是原型对象?作用是啥?
答:原型对象prototype是对象的一个属性,可以理解成一个存储空间,类的对象将具有相同内容的属性和方法存储到这个空间里,供其实例化对象访问和使用,大大减少代码量,降低内存消耗
14.什么是arguments?作用是什么?
答:实参列表,是函数对象的内置对象,作用域在函数内部,arguments的返回值是一个伪数组,只能访问元素和长度,其他API无法使用。作用有二,可以设置不定参函数,arguments.callee代表函数本身,常用于递归函数
15.为什么子类的实例对象可以访问到子类的所有属性和方法,以及父类的所有属性和方法?
答:所有实例对象在创建的过程中自带__proto__属性,指向类的原型对象prototype,所以可以访问类的原型上的属性和方法,类在构造对象的时候new出了空间,类的实例对象可以直接访问自己new出空间的属性和方法。
子类的原型对象指向父类的实例对象,子类的实例对象可以访问父类构造对象时new出的属性和方法,子类的实例对象通过父类实例对象的__proto__可以访问父类原型上的的属性和方法
16.apply/call/bind的区别是什么?
答:三者都是函数对象的内置方法,用来修改this指向。apply和call用来修饰有名函数,bind用来修饰匿名函数。apply的第二个参数必须是数组,call和bind的参数用逗号隔开。apply和call都是直接调用方法,bind会产生新的函数对象
17.面向对象的编程思想包括哪些?
答:封装、继承、多态
18.什么是封装的思想?
答:将若干个属性和方法封装成一个整体变成一个对象,通过对象调用这些属性和方法
19.什么是继承?
答:子类吸收父类已有的属性和方法,提升了代码的复用性(ES6类的方法直接绑定在原型对象上)
18.什么是多态?
答:在面向对象的过程中,有一种极致的复用性叫多态,降低了类和函数的耦合性,实现了类和函数的解耦
20.ES5继承都有哪些模式?
答:三种模式,原型继承、借用构造方法继承(apply和call)、混合继承
21.混合继承是怎么实现的?
答:混合继承是原型继承和借用构造方法继承合二为一的继承模式,在混合继承中,原型继承是子类继承父类prototype上的属性和方法,借用构造方法继承是子类继承父类new出空间的属性和方法
22.什么是原型继承?
答:通过原型对象实现继承
23.原型继承的缺陷有哪些?
答:子类对象构造时,无法初始化父类派生给子类的属性,一旦实现继承关系,继承指向就不能修改,必须先实现继承关系才能为子类添加原型属性和方法
24.借用构造方法继承的作用和缺陷是什么?
答:可以实现子类对象构造时,初始化父类派生给子类的属性,缺陷是无法继承父类原型对象上的属性和方法
25.instanceof是什么?和typeof的异同点是什么?
答:instanceof是判断引用类型的关键字,返回值是布尔值,如果A对象是B类型的,返回true,反之返回false。二者都是判断数据类型的关键字,typeof只能判断基本类型,无法判断引用类型,若判断引用类型返回Object,instanceof能够判断引用类型,且满足兼容性规则(高版本兼容低版本,低版本不兼容高版本)
26.内置基本类型和内置引用类型在存储上的区别是什么?
答:内置基本类型只有一块栈空间,里面存储的是数值,内置引用类型有栈和堆,栈里面存的是堆空间的地址,堆空间里存的是真实的内容
27.什么是值传递?什么是引用传递?
答:值传递是将栈里面的数值当作实参传递,单向传递,形参无法改变实参,需要返回值。引用传递是将栈空间里面的地址当作实参传递,形参和实参指向同一地址,形参能够改变实参堆空间的内容,双向传递,无需返回值
28.简述深浅拷贝
答:深浅拷贝是针对引用类型的概念,深浅拷贝本质区别是有没有开辟空间,浅拷贝只拷贝地址,不开辟空间,一改全改,深拷贝是既拷贝地址也开辟空间,各改各的
29.什么是单例类?怎么实现?有什么作用?
答:一个类只能创建一个对象,就是单例类。当这个类没有对象的时候,就创建一个对象,如果这个类已经有了一个对象,则无法继续创建对象,保持该类的对象永远有且只有一个。可以方便在整个项目之间传递共享数据
30.简述观察者模式
答:当发布者发布消息时,所有观察者都可以接收到该消息。代码角度:观察者定义函数,发布者调用函数,传递参数
31.什么是cookie?
答:cookie是会话跟踪技术,也是页面之间传递数据的变量。cookie分为会话级cookie和长生命周期的cookie,长生命周期的cookie由服务器生成,由服务器发送到本地磁盘,保存在本地磁盘中,会话级cookie由浏览器生成,保存在浏览器当中,浏览器关闭cookie自动清除。二者的读取是一样的,会话级cookie没有删除的概念,当所有页面关闭后会自动清除,长生命周期的cookie没有直接删除的方法,可以把存储的时间更改为-1或者等存储时间到了自动删除,长生命周期的cookie写的时候需要加expires=标准日期对象
32.cookie和本地存储的区别有什么?
答:cookie存储数据的大小是4K,本地存储的数据大小是4-5MB;cookie每次都会把数据发送在HTTP请求当中,浪费性能,本地存储不参与服务器通信;cookie的原生API极少,需要程序员自己封装,本地存储的API等同于cookie封装好的API;会话级cookie等同于sessionStorage,localStorage除非手动删除,否则将一直存储在本地。
33.什么是Object.defineProperty?
答:Object.defineProperty是ES5的一个与数据驱动息息相关的函数,能改变Vue修改变量的方式,以前是DOM驱动,现在是数据驱动,可以精准控制每个属性的特点
34.Object.defineProperty的方法有哪些?
答:get和set,value,writable(是否可以设置),enumerable(是否可以被枚举),configurable(是否可以被删除)
35.什么是双向绑定原理?文章来源:https://www.toymoban.com/news/detail-653647.html
答:改数据,DOM元素发生改变;改DOM元素,数据发生改变,用的就是Object.defineProperty()中的get和set方法文章来源地址https://www.toymoban.com/news/detail-653647.html
到了这里,关于【精选】前端JS面试题35个的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!