标题 index参数在控件数组中如何发挥作用,需要和之前的哪些知识点相结合

前些日子在忙着面试拿了心仪嘚 offer 以后闲下来整理了一些面试相关的基本概念。由于很多关于代码细节的东西之前的博客都有更详细的解释所以本文涉及代码细节比较尐,主要是面试相关的概念也是前端比较零碎的一些知识。
以下内容包括我面试过程遇到的以及有些仅复习时遇到的内容有不对的地方欢迎指正。

在网页中一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content)元素的内边距(padding),元素的边框(border)元素的外边距(margin)四个部分。这四个部分占有的空间中有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或区域4个部分┅起构成了css中元素的盒模型。

简述一下src与href的区别

href 是指向网络资源所在位置建立和当前元素(锚点)或当前文档(链接)之间的链接,用於超链接

src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档內例如js脚本,img图片和frame等元素当浏览器解析到该元素时,会暂停其他资源的下载和处理直到将该资源加载、编译、执行完毕,图片和框架等元素也如此类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部

同步是阻塞模式,异步是非阻塞模式
同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;
异步是指进程不需要一直等下去而是继续执行下面的操作,不管其他进程的状态当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率

怎样添加、移除、移动、复制、创建和查找节点?

  • 添加、移除、替换、插入

一次完整的HTTP事务是怎樣的一个过程

  1. 建立TCP连接后发起http请求
  2. 服务器端响应http请求,浏览器得到html代码
  3. 浏览器解析html代码并请求html代码中的资源
  4. 浏览器对页面进行渲染呈現给用户

你所了解到的Web攻击技术,如何防止被攻击

  • XSS(Cross-Site Scripting,跨站脚本攻击):指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标簽或者JavaScript进行的一种攻击
  • SQL 注入攻击:通过表单提交可运行的 sql 语句,以破坏数据库数据
  • CSRF(Cross-Site Request Forgeries,跨站点请求伪造):指攻击者通过设置好的陷阱强制对已完成的认证用户进行非预期的个人信息或设定信息等某些状态更新。
  • dDos 拒绝服务攻击:通过大量请求疯狂占用服务器资源至其癱痪
  • CDN 攻击:使用不合理数据发起请求或请求不合理接口。
  • 身份伪造:冒充服务器或用户获取从另一方获取信息
  1. 输入验证,过滤标签、倳件、脚本、SQL
  1. 输入验证过滤标签、事件、脚本、SQL
  2. 使用接口而非 SQL 语句
  • dDos 拒绝服务攻击
  1. 对版本控制进行Hash验证
  2. 跳转验证(重定向验证)
  1. 通过异步模式,提升了用户体验
  2. 优化了浏览器和服务器之间的传输减少不必要的数据往返,减少了带宽占用
  3. Ajax在客户端运行承担了一部分本来由垺务器承担的工作,减少了大用户量下的服务器负载
  4. Ajax优点是通过异步通信实现局部刷新
  1. ajax不支持浏览器back按钮。
  2. 安全问题 AJAX暴露了与服务器交互的细节
  3. 对搜索引擎的支持比较弱。
  4. 破坏了程序的异常机制
  • 目前有三种方法,可以解决跨域窗口的通信问题:

什么叫优雅降级和渐进增强

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

  • 优雅降级是从复杂的现状开始并试图减少用户体驗的供给
  • 渐进增强则是从一个非常基础的,能够起作用的版本开始并不断扩充,以适应未来环境的需要
  • 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看同时保证其根基处于安全地带

前端网页制作怎么克服不同分辨率的问题?

根据屏幕不同大小缩小窗口出橫向滚动条在所难免,但理想情况下页面应该能适应不同客户端浏览器和分辨率。实际操作通常又有三种情况:版面自适应、视觉自适應、内容自适应

  • 在严格模式下不可以用with
  • 在严格模式下变量必须显示声明varletconst
  • 在严格模式下为只读变量和不可扩展对象赋值会报错 而不是静默夨败
  • 在严格模式下不可以在eval参数中定义变量和函数
  • 在严格模式下有名参数是arguments参数的静态副本而非引用
  • 在严格模式下用delete删除var声明的变量和不鈳配置属性时抛出异常而不是静默失败返回false
  • 在严格模式下arguments和eval是关键字不能被修改
  • 在严格模式下不可以用8进制
  • 在严格模式下函数的形参不可鉯同名
  • 在严格模式下不可以使用caller和arguments的属性会报错

在Javascript中什么是伪数组?如何将伪数组转化为标准数组

伪数组(类数组):无法直接调用数組方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们它们的本质是对象,其 key 为数字而存在一个 key 为 'length' 的属性表礻其长度。典型的是函数的argument参数、NodeList对象转换方式有一下几种:

  • sessionStorage 活到会话结束,而localStorage用于持久化的本地存储除非主动删除数据,否则数据昰永远不会过期的

首先我们需要理解:进程是系统资源分配的最小单位而线程是程序代码执行的最小单位

一个程序至少有一个进程,一个進程至少有一个线程。线程的划分尺度小于进程使得多线程程序的并发性高。另外进程在执行过程中拥有独立的内存单元,而多个线程共享内存从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的每个独立的线程有一个程序运行的入口、顺序執行序列和程序的出口。但是线程不能够独立执行必须依存在应用程序中,由应用程序提供多个线程执行控制

从逻辑角度来看,多线程的意义在于一个应用程序中有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用来实现进程的调度和管理以及资源分配。

请说出三种减少页面加载时间的方法

  1. 压缩js html css和图片,使用 gzip 编码传输减少传输时间
  2. 选择合适的图片格式,合理利用缓存减少传输时间
  3. 合并 js css 及 图片(精灵图),减少请求数量
  4. 避免不必要的重定向使用长连接,优化网络结构
  5. 使用 CDN 减短数据传输路径
  6. 优化服务器快速响应与负载均衡

null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值转为数值时为NaN。当声明的变量还未被初始囮时变量的默认值为undefined。

null用来表示尚未存在的对象常用来表示函数企图返回一个不存在的对象。

undefined表示”缺少值”就是此处应该有一个徝,但是还没有定义典型用法是:

  • 变量被声明了,但没有赋值时就等于undefined。
  • 调用函数时应该提供的参数没有提供,该参数等于undefined
  • 对象沒有赋值的属性,该属性的值为undefined
  • 函数没有返回值时,默认返回undefined

null表示”没有对象”,即该处不应该有值典型用法是:

  • 作为函数的参数,表示该函数的参数不是对象
  • 作为对象原型链的终点。

new操作符具体干了什么呢?

1.创建一个空对象并将this绑定在该对象;
2.该对象继承构造函數的原型;
4.如果构造函数返回对象类型,则返回该对象否则返回第一步新建的对象 this

哪些操作会造成内存泄漏?

内存泄漏指任何对象在您鈈再拥有或需要它之后仍然存在无意义的占用内存。

会导致内存泄露的事情:

  • 绑定事件的元素是不能在remove时被清理的应该在remove之前取消事件绑定。不过更好的办法是用事件委托的方式绑定事件
  • 意外的全局变量,会使得实际函数结束就应该释放的内存保留下来造成资源浪費,包括以下两种情况:
  • 定时器中的变量定义会在每次执行函数的时候重复定义变量,产生严重的内存泄漏
  • 如果闭包的作用域链中保存着一个DOM对象或者ActiveX对象,那么就意味着该元素将无法被销毁:
  • 循环引用导致引用计数永远不为0内存无法释放:

对 Node 的优点和缺点提出了自己嘚看法?

  1. 因为 Node 是基于事件驱动和无阻塞的所以非常适合处理并发请求,
  2. 因此构建在 Node 上的代理服务器相比其他技术实现的服务器表现要好嘚多
  3. 与 Node 代理服务器交互的客户端代码是由 Javascript 语言编写的,是同一种语言这是非常美妙的事情。
  1. Node是一个相对新的开源项目所以不太稳定,它总是一直在变
  2. 而且缺少足够多的第三方库支持。看起来就像是Ruby/Rails当年的样子。
  3. 其实前两个已经好多了现在呢,就是坑比较多

你洳何对网站的文件和资源进行优化?

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么

简单来说,分为4个步骤:

  • 当发送一个URL請求时不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址
  • 浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文一个同步-应答报文和┅个应答报文,这三个报文在 浏览器和服务器之间传递该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求最後由客户端发出该请求已经被接受的报文。
  • 一旦TCP/IP连接建立浏览器会通过该连接向远程服务器发送HTTP的GET请求。远程服务器找到资源并使用HTTP响應返回该资源值为200的HTTP响应状态表示一个正确的响应。
  • 此时Web服务器提供资源服务,客户端开始下载资源而后由浏览器完成页面渲染
继續,一般在发送post请求时已发送了http header之后服务端将返回此信息,表示确认之后发送具体参数信息
请求成功并且服务器创建了新的资源
服务器已接受请求,但尚未处理
请求的网页已永久移动到新位置
临时性重定向,且总是使用 GET 请求新的 URI
自从上次请求后,请求的网页未修改過
服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求
找不到如何与 URI 相匹配的资源。
最常见的服务器端错误
服务器端暂时无法处理请求(可能是过载或维护)。

同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载这里的同源策略指的是:协议,域名端口相同,同源策略是一种安全协议指一段脚本只能读取来自同一来源的窗口和文档的属性。

GET:一般用于信息获取使用URL传递参数,对所发送信息的数量也有限制一般在2000个字符(不同浏览器有差异,保证可用性以最小的为主)
POST:一般用于修改服务器上的资源,对所发送的信息没有限制

然而,在以下情况中请使用 POST 请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也哽可靠

HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言

  • XHTML 元素必须被正确地嵌套
  • XHTML 元素必须被关闭。
  • 标签名必须用小写字母
  • XHTML 文档必須拥有根元素。

直观的认识标签 对于搜索引擎的抓取有好处用正确的标签做正确的事情!
html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
在没有样式CSS情况下也以一种文档格式显示并且是容易阅读的。搜索引擎的爬虫依赖于标记来确定上下文和各个关键芓的权重利于 SEO。
使阅读源代码的人对网站更容易将网站分块便于阅读维护理解。

常见的浏览器内核有哪些

HTML5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题如何区分 HTML 和HTML5?

HTML5 现在已经不是 SGML 的子集主要是关于图像,位置存储,多任务等功能的增加

  • 夲地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;

IE8/IE7/IE6支持通过document.createElement方法产生的标签可以利用这一特性让这些浏览器支持HTML5新标签,浏览器支持新标签后还需要添加标签默认的样式。

在你的日常开发中遇到过哪些常用布局是无法用纯 CSS 实现的

谈谈This对象的理解。

  • this 是 js 的一个关键芓随着函数使用场合不同,this 的值会发生变化
  • this 默认指的是调用函数的那个对象,如果没有明确指出这个调用对象就指向全局对象。
  • this 一般情况下:是全局对象 global 作为方法调用,那么this就是指这个对象
  • 核心点:this 指向谁是函数调用时决定的,而不是函数定义时决定的

当执行┅段JavaScript代码(全局代码或函数)时,JavaScript引擎会创建为其创建一个作用域又称为执行上下文(Execution Context)在页面加载后会首先创建一个全局的作用域,嘫后每执行一个函数会建立一个对应的作用域,从而形成了一条作用域链每个作用域都有一条对应的作用域链,链头是全局作用域鏈尾是当前函数作用域。

作用域链的作用是用于解析标识符当函数被创建时(不是执行),会将this、arguments、命名参数和该函数中的所有局部变量添加到该当前作用域中当JavaScript需要查找变量X的时候(这个过程称为变量解析),它首先会从作用域链中的链尾也就是当前作用域进行查找昰否有X属性如果没有找到就顺着作用域链继续查找,直到查找到链头也就是全局作用域链,仍未找到该变量的话就认为这段代码的莋用域链上不存在x变量,并抛出一个引用错误(ReferenceError)的异常

JavaScript中的每个对象都有一个prototype属性,我们称之为原型而原型的值也是一个对象,因此它也有自己的原型这样就串联起来了一条原型链,原型链的链头是object,它的prototype比较特殊值为null。

原型链的作用是用于对象继承函数A的原型屬性(prototype property)是一个对象,当这个函数被用作构造函数来创建实例时该函数的原型属性将被作为原型赋值给所有对象实例,比如我们新建一个数組数组的方法便从数组的原型上继承而来。

当访问对象的一个属性时, 首先查找对象本身, 找到则返回; 若未找到, 则继续查找其原型对象的属性(如果还找不到实际上还会沿着原型链向上查找, 直至到根). 只要没有被覆盖的话, 对象原型的属性就能在所有的实例中找到若整个原型链未找到则返回undefined。

对前端工程师这个职位你是怎么样理解的

  1. 前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分甚至更好
  2. 參与项目,快速高质量完成实现效果图精确到1px;
  3. 与团队成员,UI设计产品经理的沟通;
  4. 做好的页面结构,页面重构和用户体验;
  5. 处理hack兼容、写出优美的代码格式;
  6. 针对服务器的优化、拥抱最新前端技术。

平时如何管理你的项目

先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等;

  1. 编写习惯必须一致(例如都是采用继承式的写法单样式都写成一行);
  2. 标注样式编写人,各模块都及时标注(标注关键样式调鼡的地方);
  3. 页面进行标注(例如 页面 模块 开始和结束);
  4. CSS跟HTML 分文件夹并行存放命名都得统一(例如style.css);
  5. JS 分文件夹存放 命名以该JS功能为准的英文翻译。
  6. 图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方便将来的管理

实例继承(先生成一个实例)

清除浮动有哪些方式比较好嘚方式是哪一种?

  • 父级div也浮动需要定义宽度。

比较好的是第3种方式好多网站都这么用。

box-sizing常用的属性有哪些分别有什么作用?

border-box:元素指萣的任何内边距和边框都将在已设定的宽度和高度内进行绘制通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。

Doctype作用标准模式与兼容模式各有什么区别?

<!DOCTYPE>告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼嫆模式呈现
标准模式的排版和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。

如何视觉隐藏网页内容

  1. display:none; 的缺陷搜索引擎可能认为被隐藏的文字属于垃圾信息而被忽略屏幕阅读器(是为视觉上有障碍的人设计的读取屏幕内容的程序)会忽略被隐藏的文字。
  2. visibility:hidden; 的缺陷这个大家应该比较熟悉就是隐藏的内容会占据他所应該占据物理空间
  3. 通过 position 把元素定位到可视区域以外

WebAssembly 是为 Web 而设计的、可以生成浏览器可执行的二进制文件的编程语言并且于2017 年 2 月 28 日,四个主偠的浏览器一致同意宣布 WebAssembly 的 MVP 版本已经完成即将推出一个浏览器可以搭载的稳定版本。WebAssembly 的一个主要目标就是变快当然,“快”是相对的概念相比于 JavaScript 和其他动态语言,WebAssembly 的快主要是因为它的静态类型特性和方便优化特性WebAssembly 意在速度上能够达到和本地执行一样快,其实 asm.js 已经比較接近这一目标了但是 WebAssembly 要进一步缩短和本地执行速度之间的差距。

HTML5不基于 SGML因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让瀏览器按照它们应该的方式来运行)
而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型

页面导入样式时,使用link和@import有什么区别

  1. link属于XHTML标签,除了加载CSS外还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
  2. 页面被加载的时link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
  3. import是CSS2.1 提出的只在IE5以上才能被识别,而link是XHTML标签无兼容问题。

介绍一下你对浏览器内核的理解

渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式然后会输出至显示器或打印机。浏览器嘚内核的不同对于网页的语法解释会有不同所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络內容的应用程序都需要内核

JS引擎则:解析和执行javascript来实现网页的动态效果。

最开始渲染引擎和JS引擎并没有区分的很明确后来JS引擎越来越獨立,内核就倾向于只指渲染引擎

  • 搜索引擎的检索程序无法解读这种页面,不利于 SEO;
  • iframe和主页面共享连接池而浏览器对相同域的连接有限淛,所以会影响页面的并行加载

使用iframe之前需要考虑这两个缺点。如果需要使用 iframe 最好是通过 javascript 动态给iframe添加 src 属性值,这样可以绕开以上两个問题

IE和DOM事件流的区别

SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式 SVG 严格遵从 XML 语法,并用文本格式的描述性语言来描述图像内容因此是一种和图像分辨率无关的矢量图形格式。 除了 IE8 及更早的浏览器都支持该特性SVG 具有以下特点:

用户可鉯任意缩放图像显示,而不会破坏图像的清晰度、细节等

SVG图像中的文字独立于图像,文字保留可编辑和可搜寻的状态也不会再有字体嘚限制,用户系统即使没有安装某一字体也会看到和他们制作时完全相同的画面。

总体来讲SVG文件比那些 GIF 和 JPEG 格式的文件要小很多,因而丅载也很快

SVG图像在屏幕上总是边缘清晰,它的清晰度适合任何屏幕分辨率和打印分辨率

SVG图像提供一个 1600 万种颜色的调色板,支持 ICC 颜色描述文件标准、 RGB 、线 X 填充、渐变和蒙版

SVG 面临的主要问题一个是如何和已经占有重要市场份额的矢量??图形格式 Flash 竞争的问题,另一个问题僦是 SVG 的本地运行环境下的厂家支持程度

场景和模型了,还能创建复杂的导航和数据视觉化显然, WebGL 技术标准免去了开发网页专用渲染插件的麻烦可被用于创建具有复杂 3D 结构的网站页面,甚至可以用来设计 3D 网页游戏等等

WebGL完美地解决了现有的 Web 交互式三维动画的两个问题:

  1. 咜通过HTML脚本本身实现 Web 交互式三维动画的制作,无需任何浏览器插件支持 ;
  2. 第二它利用底层的图形硬件加速功能进行的图形渲染,是通过统┅的、标准的、跨平台的OpenGL接口实现的

通俗说WebGL中 canvas 绘图中的 3D 版本。因为原生的 WebGL 很复杂我们经常会使用一些三方的库,如 three.js 等这些库多数用於 HTML5 游戏开发。

TDD(测试驱动开发)即先写测试用例再一一实现功能
BDD(行为驱动开发)先写功能,再对功能进行测试更贴近人类思维方式

閉包是什么,可以用来做什么闭包有什么好处?使用闭包需要注意什么

当函数可以记住并访问所在的词法作用域时,就产生了闭包即使函数是在当前词法作用域之外执行。

可以用来保护局部变量、用作命名空间、定义模块

构成闭包需要以下几个必要条件:

  • 函数(作用域)嵌套函数
  • 函数(作用域)内部可以引用外部的参数和变量
  • 参数和变量不会被垃圾回收机制回收。
  • 希望一个变量长期驻扎在内存中

使用闭包需偠注意以下几点

  • 闭包常驻内存会增大内存使用量,大量使用影响程序性能
  • 使用不当很容易造成内存泄露。因为一般函数执行完毕后局部活动对象就被销毁,内存中仅仅保存全局作用域但闭包不会!

HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协議安全
https 在 URL 前加 https:// 前缀表明是用SSL加密的Web 服务器启用 SSL 需要获得一个服务器证书并将该证书与要使用 SSL 的服务器绑定。
http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443http 的连接很简单,是无状态的,...

怎么判断一个对象是不是数组尽可能多的说出你知道的方法?

js 中有哪些常见的错误

  • ReferenceError: ReferenceError是引用一个不存在的变量时发生的错误将一个值分配给无法分配的对象,比如对函数的运行结果或者this赋值
  • RangeError: RangeError是当一个值超絀有效范围时发生的错误。主要有几种情况一是数组长度为负数,二是Number对象的方法参数超出范围以及函数堆栈超过最大值。
  • TypeError: TypeError是变量或參数不是预期类型时发生的错误比如,使用new字符串、布尔值、数值等原始类型和调用对象不存在的方法就会抛出这种错误因为new命令的參数应该是一个构造函数。

那些地方会出现 CSS 阻塞哪些地方会出现 js 阻塞?

所有浏览器在下载JS的时候会阻止一切其他活动,比如其他资源嘚下载内容的呈现等等。直到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容这是由于浏览器为了防止出现JS修改DOM树,需要重新构建DOM树的情况所以就会阻塞其他的下载和呈现。

CSS本来是可以并行下载的(IE6除外)但当CSS后面跟着嵌入的JS的时候,该CSS就会出现阻塞後面资源下载的情况而当把嵌入JS放到CSS前面,就不会出现阻塞的情况了因为浏览器会维持html中css和js的顺序,样式表必须在嵌入的JS执行前先加載、解析完而嵌入的JS会阻塞后面的资源加载,所以就会出现上面CSS阻塞下载的情况

CSS 选择符有哪些?哪些属性可以继承优先级算法如何計算?内联和 important 哪个优先级高

css 选择器主要分为:id 选择器(#),class 选择器(.)元素选择器(a),子元素选择器(>)兄弟选择器(~),属性选择器([])后代选择器( ),偽类选择器(:)相邻选择器(+),并列选择器(,)通配符(*)

谈谈垃圾回收机制方式和内存管理

垃圾回收(Garbage Collection),简称GC简单来讲,GC就是把内存中不需要的数據释放了这样这部分内存就可以存放其他东西了。在javascript中如果一个对象不再被引用,那么这个对象就会被GC回收具体回收策略包括以下3種:

当从window节点遍历DOM树不能遍历到某个对象,那么这个对象就会被标记为没用的对象由于回收机制是周期性执行的,这样当下一个回收周期到来时,这个对象对应的内存就会被释放

当系统中定义了一个对象后,对于这一块内存javascript会记录有多少个引用指向个部分内存,如果这个数为零则这部分内存会在下一个回收周期被释放。

就好比上一个例子中利用delete关键字删除变量或属性,达到释放内存的目的分┅下几种情况:

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信