Web前端面试

it2023-11-16  66

1.js中原型和原型链的工作原理

①所有引用类型(函数,数组,对象)都拥有__proto__属性(隐式原型)

②所有函数拥有prototype属性(显式原型)(仅限函数)

③原型对象:拥有prototype属性的对象,在定义函数时就被创建

1.实例的隐式原型指向它构造函数的显式原型 2查找属性,如果本身没有,则会去__proto__中查找,也就是构造函数的显式原型中查找。 如果构造函数中也没有该属性,因为构造函数也是对象,也有__proto__,那么会去它的显式原型中查找,一直到null,如果没有则返回undefined

2.js中闭包是怎么形成的,有哪些用途

内部函数访问外部函数中的变量,这个变量始终保存在内存中,不会随着函数的结束而自动销毁。

1.匿名自执行函数 2.缓存 3.实现封装 4.实现面向对象 ps:匿名函数:1.实现闭包 2.模拟块级作用域,减少全局变量,降低命名冲突

3.什么是跨域请求,为什么浏览器拒绝跨域请求,实现跨域的方法

1.跨域:协议名(http/https),域名,端口号有一个不同源就是跨域 2.拒绝跨域原因:①跨域可以请求的话,很多服务器会遭受额外攻击 ②可以在别人的网站里攻击其他服务器 ③浏览器是客户端,会导致服务器流量过大 3.方法:①jsonp跨域(只有get请求) ②CORS设置请求头 ③document.domain ④postMessage

4.js中实现对对象的深拷贝

栈:基本类型的值和引用类型的地址 堆:引用类型的值 深拷贝:JSON.parse(JSON.stringify)

5.js函数中this的指向

1.全局环境下,this指向window 2.对象调用函数时,this指向当前对象 3.构造函数中,如果返回对象,this指向这个对象,否则指向函数实例 4.apply和call指向传入的第一个参数

6.在浏览器地址栏输入一个网址,从敲下回车到页面完全加载完毕,中间发生了什么

- DNS域名解析(域名还原为IP地址) - TCP连接 - HTTP请求 - 处理请求返回HTTP响应 - 页面渲染 - 关闭连接

7.vue中computed和methods中函数的调用机制有何不同

1.methods调用函数加() 2.computed如果相关依赖不发生改变,就会一直沿用第一次的值 3.methods是实时的,在重新渲染时函数会重新调用执行

8.vue中双向绑定指令v-model的本质是什么,自定义组件如何支持v-model

本质:是通过数据劫持结合发布者-订阅者模式的方式来实现的。 数据劫持:Object.defineProperty用set,get方法实现重写 发布者-订阅者模式:

1.实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。

2.实现一个订阅者Watcher,可以收到属性的变化通知并执行相应的函数,从而更新视图。

3.实现一个解析器Compile,可以扫描和解析每个节点的相关指令,并根据初始化模板数据以及初始化相应的订阅器。

9.vue中实现MVVM的原理

MVVM 是 Model-View-ViewModel 的缩写。 Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。 View 代表UI 组件,它负责将数据模型转化成UI 展现出来。 ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。 在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。 ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。
最新回复(0)