JavaScript相关面试题:1.js垃圾回收机制;2.闭包;3.为什么不建议使用innerHTML;4.null和undefined的区别;5.new 操作符

简介: new 操作符的作用是什么?:作用如下。(1)创建一个空对象。(2)由this变量引用该对象。(3)该对象继承该函数的原型(更改原型链的指向)。(4)把属性和方法加入到this引用的对象中。(5)新创建的对象由this引用,最后隐式地返回this, 过程如下:var obj={};obj._proto_=Base.prototype;Base.cail(obj)

文章目录

JS 有哪些垃圾回收机制?

说说你对闭包的理解

为什么不建议在 JavaScript 中使用 innerHTML?

null和undefined的区别是什么?

new 操作符的作用是什么?

JS 有哪些垃圾回收机制?

:有以下垃圾回收机制。


●标记清除(markandsweep)

这是JavaScript 最常见的垃圾回收方式。当变量进入执行环境的时候,比如在函数中声明一个变量,垃圾回收器将其标记为“进入环境”。当变量离开环境的时候(函数执行结束),将其标记为“离开环境”。

垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中的变量,以及被环境中变量所引用的变量(闭包)的标记。在完成这些之后仍然存在的标记就是要删除的变量。


●引用计数( reference counting )

在低版本的IE中经常会发生内存泄漏,很多时候就是因为它采用引用计数的方式进行垃圾回收。引用计数的策略是跟踪记录每个值被使用的次数。当声明了一个变量并将一个引用类型赋值给该变量的时候,这个值的引用次数就加1。 如果该变量的值变成了另外一个,则这个值的引用次数减1。当这个值的引用次数变为0的时候,说明没有变量在使用,这个值没法被访问。因此,可以将它占用的空间回收,这样垃圾回收器会在运行的时候清理引用次数为0的值占用的空间。

在IE中虽然JavaScript对象通过标记清除的方式进行垃圾回收,但是BOM与DOM对象是用引用计数的方式回收垃圾的。也就是说,只要涉及BOM和DOM,就会出现循环引用问题。


说说你对闭包的理解

使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染;缺点是闭包会常驻内存,增加内存使用量,使用不当很容易造成内存泄漏。在JavaScript中,函数即闭包,只有函数才会产生作用域。

闭包有3个特性。

(1)函数嵌套函数。

(2)在函数内部可以引用外部的参数和变量。

(3)参数和变量不会以垃圾回收机制回收。


为什么不建议在 JavaScript 中使用 innerHTML?

:通过innerHTML 修改内容,每次都会刷新,因此很慢。

在innerHTML 中没有验证的机会,因此更容易在文档中插入错误代码,使网页不稳定。


null和undefined的区别是什么?

null是一个表示、“无”的对象,转为数值时为0; undefined 是一个表示、“无”的原始值,转为数值时为NaN。

当声明的变量还未初始化时,变量的默认值为undefined.

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

(1)如果变量声明了,但没有赋值,它就等于undefined.

(2)当调用函数时,如果没有提供应该提供的参数,该参数就等于undefined.

(3)如果对象没有赋值,该属性的值为undefined.

(4)当函数没有返回值时,默认返回undefined.null表示“没有对象”,即此处不应该有值,

典型用法是如下

(1)作为函数的参数,表示该函数的参数不是对象。

(2)作为对象原型链的终点。


new 操作符的作用是什么?

:作用如下。

(1)创建一个空对象。

(2)由this变量引用该对象。

(3)该对象继承该函数的原型(更改原型链的指向)。

(4)把属性和方法加入到this引用的对象中。

(5)新创建的对象由this引用,最后隐式地返回this, 过程如下:


var obj={};

obj._proto_=Base.prototype;

Base.cail(obj)


目录
相关文章
|
JavaScript 前端开发 算法
JS垃圾回收
【10月更文挑战第30天】JavaScript 的垃圾回收机制是保证程序稳定运行的重要组成部分。了解垃圾回收的原理和算法,以及注意避免内存泄漏的问题,可以帮助开发者更好地利用 JavaScript 进行高效的开发
|
9月前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
JS回收机制方法讲解
|
12月前
|
JavaScript 前端开发 容器
this、self、window、top 在 JavaScript 中的区别深入研究
在 JavaScript 开发中,`this`、`self`、`window` 和 `top` 是四个常用的概念。`this` 指向当前执行上下文的对象,其值取决于函数调用方式;`self` 在全局作用域中等同于 `window`,常用于 Web Workers;`window` 代表浏览器窗口,是全局变量的容器;`top` 指向最顶层窗口,用于判断是否在框架中。理解这些概念有助于编写健壮的代码。
388 1
this、self、window、top 在 JavaScript 中的区别深入研究
|
10月前
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
10月前
|
供应链 JavaScript 前端开发
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
257 1
|
设计模式 JavaScript 前端开发
js中new和object.creat区别
【10月更文挑战第29天】`new` 关键字和 `Object.create()` 方法在创建对象的方式、原型链继承、属性初始化以及适用场景等方面都存在差异。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象。
|
存储 JavaScript 前端开发
成功解决:Cannot read properties of undefined (reading ‘commit‘)
这篇文章提供了解决Vuex中"Cannot read properties of undefined (reading 'commit')"错误的两种方法:检查模板中的数据属性是否存在,以及确保在Vue实例中正确挂载了store对象。
成功解决:Cannot read properties of undefined (reading ‘commit‘)
|
定位技术 Apache
Echarts——Invalid geoJson format Cannot read property 'length' of undefined
Echarts——Invalid geoJson format Cannot read property 'length' of undefined
265 0

热门文章

最新文章