专项练习20

目录

一、选择题

    1、以下代码执行后,console 输出的信息是?

    2、以下哪个选项的描述是错误的

    3、以下代码执行后,array的结果是?

二、编程题

    1、将参数数组转换为字符串输出


一、选择题

1、以下代码执行后,console 输出的信息是?
for(let i = 0; i < 5; i++){
    requestAnimationFrame(() => console.log(i));
}

A、1 2 3 4 5

B、0 1 2 3 4

C、4 4 4 4 4

D、5 5 5 5 5

正确答案:B        你的答案:D

解析:

(1)requestAnimationFrame 虽然是异步函数,for 循环是同步任务,同步任务遇到异步任务会自动挂起继续执行同步任务,i 在 for 循环内定义,let是块级作用域,不存在变量提升,不可重复定义,声明的变量不会作为 windows 属性,相当于当前的 i 只在本轮循环有效,可以理解为每一次循环的 i 其实都是一个新的变量,来把当前值和 requestAnimationFrame 放在这个作用域中

(2)拓展:window.requestAnimationFrame() 告诉浏览器你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画,该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行


2、以下哪个选项的描述是错误

A、iframe是用来在网页中插入第三方页面,早期的页面使用iframe主要是用于导航栏这种很多页面都相同的部分,这样在切换页面的时候避免重复下载

B、iframe的创建比一般的DOM元素慢了1-2个数量级

C、iframe标签会阻塞页面的的加载

D、iframe本质是动态语言的Incude机制和利用ajax动态填充内容

正确答案:D

解析:

(1)iframe 的局限

① iframe 创建比一般的 DOM 元素的创建慢了 1-2 个数量级

         使用 iframe 的页面一般不会包含太多 iframe,所创建 DOM 节点所花费的时间才不会占很大的比重

② 阻塞页面加载

        window 的 onload 事件需要在所有 iframe 加载完毕后(包含里面的元素)才会触发。在 Safari 和 Chrome 里,通过 JavaScript 动态设置 iframe 的 SRC 可以避免这种阻塞情况

③唯一的连接池

        绝大部分浏览器,主页面和其中的 iframe 是共享连接的。这意味着 iframe 在加载资源时可能用光了所有的可用连接,从而阻塞了主页面资源的加载。如果 iframe 中的内容比主页面的内容更重要,这当然是很好的。但通常情况下,iframe 里的内容是没有主页面的内容重要的。这时 iframe 中用光了可用的连接就是不值得的了。一种解决办法是,在主页面上重要的元素加载完毕后,再动态设置 iframe 的 SRC

        浏览器只能开少量的连接到 web 服务器,比较老的浏览器,包含 Internet Explorer 6 & 7 和 Firefox 2,只能对一个域名(hostname)同时打开两个连接。这个数量的限制在新版本的浏览器中有所提高。Safari 3+ 和 Opera 9+ 可同时对一个域名打开 4 个连接,Chrome 1+, IE 8 以及 Firefox 3 可以同时打开 6 个

④不利于 SEO

        搜索引擎的检索程序无法解读 iframe。另外,iframe 本身不是动态语言,样式和脚本都需要额外导入

(2)深入理解

https://www.cnblogs.com/Leophen/p/11403800.html


3、以下代码执行后,array的结果是?
var array=[-1,1,3,4,6,10];
array.sort((a,b)=>Math.abs(a-3)-Math.abs(b-3));

A、[10,-1,6,1,4,3]

B、[10,6,4,3,1,-1]

C、[3,4,1,6,-1,10]

D、[-1,1,3,4,6,10]

正确答案:C        你的答案:A

解析:

(1)sort() 方法背后是冒泡排序,对于sortFunction(a,b),a 和 b 元素是数组中相邻元素,但是在数组中 a 和 b 的位置是 b,a,即b元素在a元素的前面,sortFunction(a,b) 在执行完之后,会返回数值,若返回值>0,即 true,a,b位置不变,即b,a;若返回值<0,即 false交换a,b元素位置,即a,b;若返回值==0,a,b位置不变

(2)原题分析

①原数组var array=[-1,1,3,4,6,10];

②参数(a,b)=>Math.abs(a-3)-Math.abs(b-3):即数值减3的绝对值[4,2,0,1,3,7]作为参数决定排序

③根据绝对值减3大小排列[0,1,2,3,4,7],对应的原数组排序后为[3,4,1,6,-1,10]


二、编程题

1、将参数数组转换为字符串输出

示例:_join([1,'2',3]) -> "123"
注意:只需考虑一维数组且数据类型为原始数据类型

解析:

(1)join()方法,将数组转字符串

<script>
    let array = [1,'2',3]
    function _join(array){
        return array.join('')
    }
    console.log(_join(array));
</script>

(2)forEach循环数组,一一将值赋给空字符串x

<script>
    let array = [1,'2',3]
    function _join(array){
        let x = ''
        array.forEach(element => {
            x = x + element
        });
        return x
    }
    console.log(_join(array));
</script>

(3)先转字符串,replaceAll() 方法去除逗号 ',' 最后返回一个新字符串

<script>
    let array = [1,'2',3]
    function _join(array){
        let x = array.toString().replaceAll(',','')
        return x
    }
    console.log(_join(array));
</script>

(4)reduce()方法

<script>
    let array = [1,'2',3]
    function _join(array){
        let x = ''
        return array.reduce((pre,cur)=>pre+cur,x)
    }
    console.log(_join(array));
</script>

猜你喜欢

转载自blog.csdn.net/qq_51478745/article/details/131563191