web考核题

本文介绍了JavaScript中的数据类型、变量声明区别、call/apply/bind函数调用方式、对象创建方法、垃圾回收机制、内存管理以及数组扁平化等概念,帮助读者理解JavaScript语言的基础特性。
摘要由CSDN通过智能技术生成

第一题.(5分)

JavaScript中的数据类型有哪几种?并写出判断数据类型的方法

题解:

Number、Boolean、String、Undefined、Null、object

typeof可以用来检测变量的数据类型

第二题.(5分)

简述一下let,var,const的区别;

题解:

var:全局作用域,声明变量提升

let:块级作用域,声明变量不会被提升,不允许重复声明

const:块级作用域,定义后值不能修改,声明变量不会被提升

第三题.(5分)

JavaScript中call,apply,bind的区别和用法

题解:

call: 是函数对象的方法,用于在指定的上下文中调用函数。它接受一个参数列表,第一个参数是要设置为函数上下文的对象,其余参数是函数的参数。call会立即调用函数。

apple:在指定的上下文中调用函数,接受一个参数数组作为参数,而不是一个参数列表,也会立即调用函数

bind:用于创建一个新的函数,它与原始函数具有相同的功能,但永久性地绑定到指定的上下文。不会立即调用函数,可以接受参数,这些参数会被传递给原始函数

第四题.(5分)

JavaScript对象创建的方式有哪些?

题解:

利用对象字面量创建

 //利用对象字面量创建对象  {}
        var obj = {};  //创建了一个空的对象
        var obj = {
            unname: '',
            age: '',
            sex: '',
            height: '',
            sayHi: function() {
                console.log(12);
            }
        }

里面属性或者方法采取键值对形式

多个属性或者方法之间用逗号隔开

方法冒号后面跟的是一个匿名函数

利用new Object创建对象

 // 利用new Object()  创建对象
        var obj = new Object();   //创建一个空的对象
        obj.uname = 'zhang';
        obj.age = 18;
        obj.sayHi = function() {
            console.log(12);
        }

(1)利用等号赋值的方法添加对象的属性和方法

(2)每个属性和方法之间用分号

利用构造函数创建对象

// 利用构造函数创建对象
        // 前两种方法一次只能创建一个对象
        function  构造函数名() {
            this.属性 =;
            this.方法 = function() {}
        }
        new 构造函数名();
        // 构造函数  把对象里面的一些相同属性的方法和属性抽象出来封装到函数里面

(1).构造函数名字首字母大写

(2).我们构造函数不需要return就可以返回结果

调用函数返回的是一个对象

利用new关键字调用函数的行为叫实例化

(3).调用构造函数,必须使用new

(4).我们只要new Star()调用函数就创建了一个对象 ldh{}

(5).我们属性和方法前面必须添加this

第五题.(5分)

简述一下浏览器的垃圾回收机制

题解:

js中内存的分配和回收都是自动完成的,内存在不使用的时候会被垃圾回收器自动回收

内存的生命周期:
内存分配:声明变量或函数时,系统会自动分配内存

内存使用:读写内存,也就是使用变量、函数

内存回收:使用完毕,由垃圾回收器自动回收不再使用的内存

全局变量在页面关闭时回收

局部变量的值在不用时自动回收掉

内存泄漏:程序中分配的内存由于某种原因未释放或无法释放叫内存泄漏

两种垃圾回收算法: 引用计数法 标记清除法

引用计数法:看一个对象是否有指向它的引用,没有引用了就回收对象

存在问题:嵌套引用,如果两个对象向相互引用,尽管已经不再使用,垃圾回收器不会进行回收,导致内存泄漏

因为他们引用的次数永远不会是0

标记清除法:将“不再使用的对象”定义为“无法到达的对象”

从根部出发定时扫描内存的中的对象,凡是能从根部到达的对象。都是还需要的对象

无法从根部触及到的对象被标记为不再使用,稍后进行回收

第六题.(5分)

New操作符执行过程

题解:

1.创建一个新的空对象

2.将新对象的原型指向构造函数的原型

3.执行构造函数

4.返回新对象

第七题.(10分)

已知如下数组,编写一个程序将数组扁平化去并除其中重复部分数据,最终得 到一个不重复的数组

如var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]

化为:arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

题解:

function splitAndFlatten(arr) {
  const flatArray = arr.toString().split(',').map(Number);
  return Array.from(new Set(flatArray));
}

上述函数先将数组按[]进行分割之后再对其进行去重处理。

二.代码输出题(40分)

第八题.(10分)()()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

题解:2

因为调用了两次函数,第一次调用b的值为1,但a的值变为2

所以在第二次调用后b的值变为2.

第九题(10分)(事件循环机制)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

题解:

1、4、5、7、6、3、2

先根据顺序输出1、4,然后new promise是一个同步操作,然后输出里面的5,然后将then里面的内容放在异步栈中,最后输出7,在同步任务进行完后,开始进行异步操作,而异步操作分为微任务和宏任务,then属于微任务所以先执行,输出6,然后再执行计时器,根据时间输出。

第十题.(10分)(作用域和this指向)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

person1:普通调用函数,this指向调用它的函数

window:箭头函数中this与普通函数完全不同,也不受调用方式的影响,事实上箭头函数并不存在this

1.箭头函数中的this引用就是最近作用域的this

2.向外层作用域中一层一层找this,知道由this定义

window:两个函数构成立即执行函数,其this指向全局作用域

person1:里面的this指向外层作用域的this,所以指向上一层的person1

window:箭头函数this只指向外层作用域,不受call、bind和apply的影响

第十一题(10分)(变量)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

题解: 0~10

functionArray里面存的是一个函数用来打印i的值

在上面循环结束时i的值时10,所以最后打印的是10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值