美文网首页
js面试题

js面试题

作者: 迷失的信徒 | 来源:发表于2022-08-18 12:19 被阅读0次

1、js 数据类型

基本数据类型
Number、String 、Boolean、Null 、 Undefined、Symbol 、biglnt。
引用数据类型
object, Array, Date, Function, RegExp。

2、js 变量和函数声明的提升

js中变量和函数的声明会提升到最顶部执行

  • 函数的提升高于变量的提升。
  • 函数内部如果用 var声明了相同名称的外部变量,函数将不再向上寻找。
  • 匿名函数不会提升。

3、闭包

  • 闭包就是能够读取其他函数内部变量的函数 。
  • 闭包基本上就是一个函数内部返回一个函数。

好处:
可以读取西数内部的变量。
将变量始终保持在内存中。
可以封装对象的私有属性和私有方法。

坏处:
比较耗费内存、使用不当会造成内存溢出的问题。

4、==和===的区别

  • ==是非严格意义上的相等。
  • 值柤等就相等。
  • ===是严格意义上的相等,会比较两边的数据类型值大小。
  • 引用地址都相等才相等

5, this

  • this总是指向函数的直接调用者。
  • 如果有new 关键宇,this 指向 new 出来的对象。
  • 在事件中,this 指向触发这个事件的对象。

6、js数组和对象的遍历方式

for in
for
forEach
for-of

7、map 与 forEach 的区别

forEach方法,是最基本的方法,就是遍历与循环,默认有 3个传参:分别是遍历的数组内容item、数组素引index、和当前遍历数组 Array
map 方法,基本用法与forEach一致,但是不同的,它会返回一个新的数组,所以 callback需要有return值,如果没有,会返回 undefined

8、箭头函数与普通函数的区别

  • 函数体内的this 对象,就是定义时所在的对象,而不是使用时所在的对象。
  • 不可以当作构造西数,也就是说,不可以使用new命令,否则会抛出一个错误。
  • 不可以使用 arguments 对象,该对象在函数体内不存在。如果要用,可以用 Rest参数代替。
  • 不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。

9、同源策略

同源指的是域名、协议、端口号相同

10、如何解决跨域

  • jsonp 跨域。
  • document.domain + iframe 跨域。
  • nodejs 中间件代理跨域。
  • 后端在头部信息里面设置安全域名。

11、严格模式的限制

  • 变量必须声明后再使用。
  • 函数的参数不能有同名属性,否则报错。
  • 不能使用with 语句。
  • 禁止 this指向全局对象。

12、es6 新增

  • 新增模板字符串。
  • 箭头函数。
  • for-of(用来遍历数据一例如数组中的值)。
  • ES6 将 Promise对象纳人规范,提供了原生的 Promise对象。
  • 增加了 letconst 命令,用来声明变量。
  • 还有就是引人module 模块的概念。

13、attribute 和 property 的区别是什么

  • attributedom 元素在文档中作为 html 标签拥有的属性。
  • properly 就是dom 元素在 js 中作为对象拥有的属性。
  • 对于html 的标准属性来说,attributeproperty 是同步的,是会自动更新的但是对于自定义的属性来说,他们是不同步的。
    14、let 和const 的区别是什么
  • let 命令不存在变量提升,如果在let 前使用,会导致报错。
  • 如果块区中存在 letconst命令,就会形成封闭作用域。
  • 不允许重复声明。
  • const 定义的是常量,不能修改,但是如果定义的是对象,可以修改对象内部的数据。

15、内存泄漏

定义:程序中己动态分配的堆内存由于某种原因程序未释放或无法释放引发的各种问题。

js 中可能出现的内存泄漏情况:结果:变慢,崩溃,延迟大等。
js 中可能出现的内存泄漏原因:

  • 全局变量。
  • dom 清空时,还存在引用。
  • 定时器未清除。
  • 子元素存在引起的内存泄露。

16、script 引入方式

  • html 静态<script>引入。
    -js动态插人<script>
  • <script defer>:昇步加载,元素解析完成后执行。
  • <script async>:异步加载,但执行时会阻塞元素渲染。

17、数组(array)方法

  • map:遍历数组,返回回调返回值组成的新数组。
  • forEach :无法 break,可以用try/catchthrow new Error 来停止。
  • filter:过滤。
  • some :有一项返回true,则整体为true
  • every:有一项返回false,则整体为false
  • join :通过指定连接符生成字符串。
  • push / pop :末尾推入和弹出,改变原数组,返回推人/弹出项。
  • unshift / shift :头部推入和弹出,改变原数组,返回操作项。
  • sort(fn) / reverse :排序与反转,改变原数组。
  • concat :连接数组,不影响原数组,浅拷贝。
  • slice(start, end) :返回截断后的新数组,不改变原数组。
  • splice(start,number,value**):返回删除元素组成的数组,value 为插入项,改变原数组。
  • indexOf / lastindexOf(value, fromlndex):查找数组项,返回对应的下标。
  • reduce / reduceRight(fn(prev, cur) , defaultPrev):两两执行,prev为上次化简函数的return 值,cur 为当前值(从第二项开始)。

18、JavaScript 深浅拷贝

浅拷贝
Object.assign
深拷贝
可以通过 JSON.parse(USON.stringify(object)) 来解决。

19、说说异步编程的实现方式

回调函数

优点:简单、容易理解。
缺点:不利于维护、代码耦合高。

事件监听

优点:容易理解,可以绑定多个事件,每个事件可以指定多个回调函数。
缺点:事件驱动型,流程不够清晰。

发发布/订阅(观察者模式)

类似于事件监听,但是可以通过消息中心,了解现在有多少发布者,多少订阅者。

Promise 对象

优点:可以利用then 方法,进行链式写法;可以书写错误时的回调函数。
缺点:编写和理解,相对比较难。

Generator 函数

优点:函数体内外的数据交换、错误处理机制。
缺点:流程管理不方便。

async 函数

优点:内置执行器、更好的语义、更广的适用性、返回的是Promise、结构清晰。
缺点:错误处理机制。

20、项目性能优化

  • 减少 HTTP 请求数。
  • 减少 DNS 查询。
  • 使用 CDN
  • 避免重定向。
  • 图片懒加载。
  • 减少 DOM元素数量。
  • 减少DOM操作。
  • 使用外部 JavaScriptCSS
  • 压缩 JavaScriptCSS、宇体、图片等。
  • 优化 CSS Sprite
  • 使用 iconfont
  • 多域名分发划分内容到不同域名。
  • 尽量减少 iframe 使用。
  • 避免图片 src 为空。
  • 把样式表放在link 中。
  • JavaScript 放在页面底部。

21、什么是单线程,和异步的关系?

单线程:只有一个线程,只能做一件事
原因:避免 DOM 渲染的冲突
浏览器需要渲染 DOM
JS 可以修改DOM 结构
JS 执行的时候,浏览器 DOM 渲染会暂停
两段 JS 也不能同时执行(都修改 DOM 就冲突了)
webworker 支持多线程,但是不能访问 DOM
解决方案:异步

22、说说负载均衡?

单台服务器共同协作,不让其中某一台或几台超额工作,发挥服务器的最大作用http重定向负载均衡:调度者根据策路选择服务器以 302 响应请求,缺点只有第一次有效果,后续操作维持在该服务器dns负载均衡:解析域名时,访问多个ip服务器中的一个(可监控性较弱)原因--避免 DOM 渲染的沖突。
反向代理负载均衡:访问统一的服务器,由服务器进行调度访问实际的某个服务器,对统一的服务器要求大,性能受到 服务器群的数量限制。

23、作用域链?

作用域链可以理解为一组对象列表,包含 父级和自身的变量对象,因此我们便能通过作用域链访问到父级里声明的变量或者函数。

24、什么是原型、原型链、继承?

  • 所有的函数都有 ````protolype``` 属性(原型)。
  • 所有的对象都有_ proto_属性。
  • 在Javascript 中,每个函数都有一个原型属性 prototype 指向自身的原型,而由这个函数创建的对象也有一个proto 属性指向这个原型,而函数的原型是一个对象,所以这个对象也会有一个proto 指向自己的原型,这样逐层深人直到 Object 对象的原型,这样就形成了原型链。

25、JS垃圾回收机制是怎样的?

1.概述

js 的垃圾回收机制是为了防止内存泄漏(已经不需要的某一块内存还一直存在着),垃圾回收机制就是不停歇的寻找这些不再使用的变量,并且释放掉它所指向的内存在JS中,JS的执行环境会负责管理代码执行过程中使用的内存。

2.变量的生命周期

当一个变量的生命周期结束之后,它所指向的内存就会被释放。js有两种变量,局部变量全局变量,局部变量是在他当前的函数中产生作用,当该函数结束之后,该变量内存会被释放,全局变量的话会一直存在,直到浏览器关闭为止。

3.js 坟圾回收方式

有两种方式:标记清除引用计数

标记清除:大部分浏览器使用这种垃圾回收,当变量进入执行环境(声明变量)的时候,垃圾回收器将该变量进行了标记,当该变量离开环境的时候,将其再度标记,随之进行删除。
引用计数:这种方式常常会引起内存的泄露,主要存在于低版本的浏览器。它的机制就是跟踪某一个值得引用次数,当声明一个变量并且将一个引用类型赋值给变量得时候引用次数加1,当这个变量指向其他一个时引用次数减 1,当为0时触发回收机制进行回收。

26、逐进增强和优雅降级

逐进增强
针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高版本浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级
一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

相关文章

  • js基础面试题

    面试题:延迟加载JS有哪些方式? 面试题:JS数据类型有哪些? 面试题:JS数据类型考题 考题一: 考题二: 面试...

  • 前端相关大杂烩

    前端基础面试题(JS部分) 前端基础面试题(JS部分)学习 React.js 比你想象的要简单 原文地址:Lear...

  • 前端JavaScript面试技巧

    1-1 课程概述 要做什么?——讲解前端 JS 基础面试题 哪些部分?——JS 基础,JS-WEB-API,JS ...

  • 2021 web高频面试题新人可看

    当日目标 1 常见面试题分布情况? 2 高频面试题 1 常见面试题分布情况 公司面试题一般分为js,vue,小程序...

  • js 基础面试题

    js 基础面试题 1 js中使用typeof能得到哪些类型? undefined、string、number、bo...

  • 99%的人都会答错的js面试题(你会吗?)(转)

    99%的人都会答错的js面试题(你会吗?)

  • js数组题目

    js面试题 js数组 一、按要求分割数组 将"js,数组,分类"字符串数组以/分割 for循环累加 join()把...

  • 前端JavaScript面试技巧

    先看几道面试题: 1、JS中使用typeof能得到哪些类型。//JS变量类型2、何时使用“==”、“===”。//...

  • js运行机制

    js运行机制 在日常面试求职中,不免会做几道面试题,这面试题中往往会遇到js执行输出顺序,而这运行机制是我们每个前...

  • web前端入门到实战:32道常见的js面试题

    JS面试题: 【点击这里领取面试题资料】[https://jq.qq.com/?_wv=1027&k=fBr6dx...

网友评论

      本文标题:js面试题

      本文链接:https://www.haomeiwen.com/subject/wkregrtx.html