• 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 等数据存储通信方式。

  • 相关阅读:
    【LeetCode 15】三数之和
    【LeetCode 14】最长公共前缀
    【LeetCode 13】罗马数字转整数
    【LeetCode 12】整数转罗马数字
    【LeetCode 11】盛最多水的容器
    【LeetCode 10】正则表达式匹配
    【LeetCode 9】回文数
    【LeetCode 8】字符串转换整数 (atoi)
    【LeetCode 7】整数反转
    【LeetCode 6】Z 字形变换
  • 原文地址:https://www.cnblogs.com/ZXH-null/p/12105452.html
Copyright © 2020-2023  润新知