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)


目录
相关文章
|
15天前
|
JavaScript
ES6学习(9)js中的new实现
ES6学习(9)js中的new实现
|
2天前
|
JSON JavaScript 前端开发
JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
|
7天前
|
自然语言处理 JavaScript 前端开发
探索JavaScript中的闭包:从基础概念到实际应用
本文深入探讨了JavaScript中闭包的概念,从定义、作用域链和实际应用等方面进行了详细阐述。通过生动的比喻和实例代码,帮助读者理解闭包在函数执行上下文中的重要性,以及如何在实际开发中有效利用闭包解决复杂问题。同时,文章也指出了过度使用闭包可能导致的潜在问题,并给出了相应的优化建议。
|
1月前
|
JavaScript 前端开发 安全
详细讲解JavaScript中的闭包问题附代码演示
闭包是JavaScript中一关键概念,它允许内部函数访问外部函数的作用域,从而实现变量的封装与持久化。本文通过示例解释了闭包的工作原理及其优势,如数据隐藏和私有变量的实现;同时也指出了闭包可能导致的内存占用问题,强调合理使用的重要性。
21 1
|
1月前
|
JavaScript 前端开发 Java
JavaScript中的闭包概念讲解
闭包是指函数内部嵌套另一个函数,并且内部函数引用了外部函数的数据(如变量或函数)。这样的内部函数被称为闭包。以示例代码为例,`fn1` 中有两个闭包函数 `fn2` 和 `fn3`,它们都可以访问并修改 `fn1` 中的变量 `a`。
13 1
|
19天前
|
存储 JavaScript 前端开发
|
20天前
|
自然语言处理 JavaScript 前端开发
|
28天前
|
自然语言处理 前端开发 JavaScript
前端进阶必读:JS闭包深度解析,掌握这一特性,你的代码将焕然一新!
【8月更文挑战第23天】闭包是JavaScript的一项高级功能,让函数能够访问和操作外部函数作用域中的变量。本文深入解析闭包概念、组成及应用场景。闭包由函数及其词法环境构成,通过在一个函数内定义另一个函数来创建。它有助于封装私有变量、维持状态和动态生成函数。然而,不当使用闭包可能导致内存泄漏或性能问题。掌握闭包对于实现模块化代码和成为优秀前端开发者至关重要。
30 0
|
1月前
|
JavaScript 前端开发 安全
JS 闭包(1)
JS 闭包(1)
26 0
|
1月前
|
JavaScript Java
JS 闭包
JS 闭包
23 0