200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 关于Web面试的基础知识点--Javascript(二)

关于Web面试的基础知识点--Javascript(二)

时间:2024-06-11 18:10:38

相关推荐

关于Web面试的基础知识点--Javascript(二)

Table of Contents

1.如何将集合转化成数组?2.Event Loop - 13.Event Loop - 24.不支持冒泡的事件5. 如何阻止事件冒泡6.比较Ajax和Flash的优劣AjaxFlash7.Promise的状态8.隐式的类型转化9.JS 解析顺序(赋值式函数和声明式函数)10. Node查找某一模块的顺序11. 变量回收变量回收规则

1.如何将集合转化成数组?

Array.form(arr, mapfn,thisArg)

用于将两类可以把对象转换为真正的数组:类似数组的对象和可遍历的对象(部署了Iterator接口的,String,ES6新增的Map和Set)。可以传3个参数,其中第一个是数组,必传;第二个是一个函数(类似map函数),对数组元素进行操作后再返回数组,可选;第三个是对于this关键字的指向,可选。

slice()

可从已有的数组中返回选定的元素。 返回值:返回一个新的数组,包含从startend(不包括该元素)的arrayObject中的元素。

请注意:该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法Array.splice()。 所以在这里就是对集合A应用slice,返回一个新的数组,不对数组做任何改变。

展开运算符

把A集合的元素展开后,用数组[]承载,返回新的数组。

map()

返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

map() 方法按照原始数组元素顺序依次处理元素。

注意:

(1)map()不会对空数组进行检测。

(2) map() 不会改变原始数组。

所以map方法返回了一个新的数组,并且数组中每个元素是A里面的元素。

var ary = [12,23,24,42,1]; var res = ary.map(function (item,index,input) {return item*10; }) console.log(res);//-->[120,230,240,420,10]; 原数组拷贝了一份,并进行了修改console.log(ary);//-->[12,23,24,42,1]; 原数组并未发生变化

2.Event Loop - 1

求运行结果:

console.log("one")setTimeout(function(){console.log("two")},0)console.log("three")

个人理解:在定时器中设置的时间为0毫秒,输出结果应为:one three two

Note :Event Loop

JavaScript语言就采用Event Loop机制,来解决单线程运行带来的一些问题。

JS 在执行的过程中会产生执行环境,这些执行环境会被顺序的加入到执行栈中。如果遇到异步的代码,会被挂起并加入到 Task(有多种 task) 队列中。一旦执行栈为空,Event Loop 就会从 Task 队列中拿出需要执行的代码并放入执行栈中执行,所以本质上来说 JS 中的异步还是同步行为

回调时,被回调的函数会被放在event loop里,等待线程里的任务执行完后才执行event loop里的代码。

因此,上述代码会先把线程里的执行完后,再执行event loop里的setTimeout函数。

借鉴资料 : 阮一峰的网络日志

3.Event Loop - 2

求运行结果:

console.log(1);let a = setTimeout(() => {console.log(2)}, 0);console.log(3);Promise.resolve(4).then(b => {console.log(b);clearTimeout(a);});console.log(5);

Output:

执行顺序是先执行同步的任务–输出1,3,5

在执行异步任务:其中异步任务分为宏任务微任务,微任务优先级高于宏任务。promise.then执行的微任务,输出4,然后clearTimeout(a)清除了定时器,于是不再打印2。

结果输出:1,3,5,4

4.不支持冒泡的事件

UI事件

load unload scroll resize

焦点事件

blur focus

鼠标事件

mouseleave mouseenter

JS事件监听(捕获&冒泡)

5. 如何阻止事件冒泡

事件绑定&移除&冒泡(如何阻止事件冒泡)

6.比较Ajax和Flash的优劣

Ajax

优势:

1.可搜索性

2.开放性

3.费用

4.易用性

5.易于开发。

劣势:

1.它可能破坏浏览器的后退功能

2.使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中

不过这些都有相关方法解决。

Flash

优势:

1.多媒体处理

2.兼容性

3.矢量图形

4.客户端资源调度

劣势:

1.二进制格式

2.格式私有

3.flash 文件经常会很大,用户第一次使用的时候需要忍耐较长的等待时间

4.性能问题

7.Promise的状态

一个Promise可能有三种状态:

等待(pending已完成(fulfilled已拒绝(rejected

一个promise的状态只可能从“等待”转到“完成”态或者“拒绝”态,不能逆向转换,同时“完成”态和“拒绝”态不能相互转换。

promise必须实现then方法(可以说,then就是promise的核心),而且then必须返回一个promise,同一个promise的then可以调用多次,并且回调的执行顺序跟它们被定义时的顺序一致。

then方法接受两个参数,第一个参数是成功时的回调,在promise由“等待”态转换到“完成”态时调用,另一个是失败时的回调,在promise由“等待”态转换到“拒绝”态时调用。同时,then可以接受另一个promise传入,也接受一个“类then”的对象或方法,即thenable对象。

Promise对象

8.隐式的类型转化

题目:

parseInt()函数可解析一个字符串,并返回一个整数。

所以说,number类型的12.34发生隐式转换为string

三元运算符,会判断?前的表达式为true或者false。所以number类型的0发生了隐式转换为boolean

+运算发生了字符串的隐式转化。原本number类型的1,和string类型的’1’进行了+运算,连接了字符串。返回’11’。

C选项:

e是js里面指数的一种表示形式。也就是10的多少次方。

2e1 等价于 2 *(10^1) = 20

2e2 等价于 2(10^2)= 200

0xaa是16进制的表示方法。相当于十进制的170。

这里都是number类型,发生了数字的乘法运算:0,没有发生类型转换

9.JS 解析顺序(赋值式函数和声明式函数)

代码如下:

var foo=function(x,y){return x-y;}function foo(x,y){return x+y;}var num=foo(1,2);

解析如下:

var foo=function(x,y){//赋值式函数return x-y;}//有名函数,可以单独定义。function foo(x,y){//声明式函数return x+y;}//实际调用var num=foo(1,2); //调用赋值式函数 return x-y 为 -1

10. Node查找某一模块的顺序

在文件/home/somebody/workspace/somemodule.js中第一行引用了一个模块:require(‘othermodule‘),请问required 的查找模块的顺序:

题目来源

首先,Node在当前目录下查找package.json(CommonJS包规范定义的包描述文件),通过JSON.parse()解析出包描述对象,从中取出main属性指定的文件名进行定位。

如果文件缺少扩展名,将会进入扩展名分析的步骤。

而如果main属性制定的文件名错误,或者压根没有package.json文件,Node会将index当做默认文件名,然后依次查找index.jsindex.nodeindex.json.

如果在目录分析的过程中没有定位成功任何文件,则自定义模块进入下一个模块路径进行查找。如果模块路径数组都被遍历完毕,依然没有查找到目标文件,则会抛出查找失败异常

按照上面的思路,首先应该查找package.json文件,看看里面有没有核心模块,应该是C最先,othermodule不是核心模块,那么接着应该进入扩展名分析的步骤,就应该是查找othermodule. js,对应B,紧接着就是以index为默认文件名,也就是A,再接下来就是上一个文件目录D了,所以答案是: C B A D

11. 变量回收

变量回收规则

1.全局变量不会被回收

2.局部变量会被回收,也就是函数一旦运行完之后,函数内部的东西就会被销毁

3.只要被另一个作用域所引用就不会被回收

之所以有3个变量没有被回收,首先是全局变量中的i ,第二行会覆盖第一行的赋值,所以只有一个,第二个

是var add ,这个变量定义了一个匿名函数,并赋值给了add,没有被回收,第三个就是闭包中的变量i,闭包中的局部变量是不会被回收的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。