javascript 的基础(理论知识)
Posted 养乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 的基础(理论知识)相关的知识,希望对你有一定的参考价值。
01、JavaSript有哪些垃圾回收机制?
标记清除( mark and sweep )
这是JavaScr i pt 最常见的垃圾回收方式。当变量进入执行环境的时候,比如在函数中声明一个变量,垃圾回收器将其标记为“进入环境” 。当变量离开环境的时候(函数执行结束),将其标记为“离开环境”。垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中的变量,以及被环境中变量所引用的变量(闭包)的标记。在完成这些之后仍然存在的标记就是要删除的变量。
引用计数( reference counting)
在低版本的IE 中经常会发生内存泄漏,很多时候就是因为它采用引用计数的方式进行垃圾回收。引用计数的策略是跟踪记录每个值被使用的次数。当声明了一个变量并将一个引用类型赋值给该变量的时候, 这个值的引用次数就加1 。如果该变量的值变成了另外一个,则这个值的引用次数就减1 。当这个值的引用次数变为0 的时候,说明没有变量在使用,这个值没法被访问。因此, 可以将它占用的空间回收,这样垃圾回收器会在运行的时候清理引用次数为0 的值占用的空间。在IE中虽然javascript 对象通过标记清除的方式进行垃圾回收,但是BOM 与DOM 对象是用引用计数的方式回收垃圾的。也就是说, 只要涉及BOM 和DOM , 就会出现循环引用问题。
02、列举几种类型的DO M 节点
有以下几类DOM 节点。
• 整个文档是一个文档( Document )节,点。
• 每个html 标签是一个元素( E l ement )节点。
• 每一个HTML 属性是一个属性( Attribute )节点。. 包含在HTML 元素中的文本是文本( Text )节点。
03、谈谈JavaSript 标签中defer 和async 属性的区别。
( 1 ) defer 属性规定是否延迟执行脚本,直到页面加载为止。async 属性规定脚本一旦可用,就异步执行。
( 2) defer 并行加载JavaScript 文件, 会按照页面上script 标签的顺序执行。async 并行加载JavaScript 文件,下载完成立即执行,不会按照页面上JavaScript 标签的顺序执行。
04、说说你对闭包的理解。
使用闭包主要是为了设计私有的方法和支量。闭包的优点是可以避免全局变量的污染;
缺点是闭包会常驻内存, 增加内存使用量,使用不当很容易造成内存泄漏。
在JavaScript 中,函数即闭包,只有函数才会产生作用域。
闭包有3 个特性。
( I )函数嵌套函数。
( 2 )在函数内部可以引用外部的参数和支量。
( 3 )参数和变量不会以垃圾回收机制回收。
05、解释一下unshift ()方法。
该方法在数组启动时起作用,与push ()不同。它将参数成员添加到数组的顶部。下面给出一段示例代码。
var name= [ ” ] ohn ” ]name unshift (”char lie”);name unshi ft ( ” ] oseph”,” Jane " ) ;cons ole log (name ); 输出生口下所示。[ ” joseph H ,” Jane ”,” char lie ”,” john ” ]
06、encodeURI ()和decodeURI ()的作用是什么?
encodeURI()用于将URL 转换为十六进制编码。而decodeURI()用于将编码的URL转换回正常URL 。
07、为什么不建议在JavaScript 中使用innerHTML?
通过innerHTML 修改内容, 每次都会刷新,因此很慢。在innerHTML 中没有验证的机会, 因此更容易在文档中插入错误代码,使网页不稳定。
08、如何在不支持JavaScript 的旧浏览器中隐藏JavaScrpit 代码?
在<script>标签之后的代码中添加“<!一” , 不带引号。
在</script>标签之前添加“刀…>”,代码中没有引号。
旧浏览器现在将JavaScript 代码视为一个长的HTML 注释, 而支持JavaScript 的浏览器则将“< !一” 和“// …>” 作为一行注释。
09、在DOM 操作中怎样创建、添加、移除、替换、插入和查找节点?
具体方法如下。
( 1 ) 通过以下代码创建新节点。createDocurnentFragrnent () // 创建一个DOM 片段
createElernent() // 创建一个具体的元素
creat eTextNode( ) //创建一个文本节点
( 2 ) 通过以下代码添加、移除、替换、插入节,点。
appendChild()
removeChild ( )
replaceChild ()
insertBefore () //并没有inse r tAf t er ()
( 3 )通过以下代码查找节点。
getElernentsByTagNarne() //通过标签名称查找节点
getE l erne 口tsByNarne () //通过元素的name 属性的值查找节点( IE 容错能力较强, 会得到一个数
//组, 其中包括id 等于name 值的节点)
getElernentByid() //通过元素 Id 查找节点, 具有唯一性
10、如何实现浏览器内多个标签页之间的通信?
调用Jocalstorge 、cookie 等数据存储通信方式。
以上是关于javascript 的基础(理论知识)的主要内容,如果未能解决你的问题,请参考以下文章