【前端面试】基础知识篇 (一)

注:难易程度和重要程度综合起来用 * 标记

Java和JavaScript有什么关系吗?*

答:理论上讲,其实并没有什么关系,也不是一个公司出的。当时开发js的时候正是java热的时候,所以高层希望能跟java沾些关系,所以才取名javaScript。两者内容也是不一样的。

js是一个解释性语言,它可以边解释边执行,而java需要先编译再执行。

整体来说java比js的语法要严格,功能也要多很多。

js中深拷贝和浅拷贝的区别?***

对于简单的数据类型,比如number,string

当我设置一个a = 1时,我再将 a 赋值给b, 对b改变的时候不会给a有任何影响。

但是当我设置一个对象类型或者数组类型 a = [1,2,3],这时我如果将a赋值给b,b接收到的其实只是a的地址,所以我操作b的数组,比如删除最后一个元素使得b = [1,2],同时a也会变化,因为b只是一个a的地址,操作b实际上还是在操作a。

所以直接将a赋值给b的操作就是浅拷贝,但如果只是拷贝了值,地址发生了变化,改变b时,a并没有改变,那么它就是深拷贝。

答:浅拷贝只是拷贝了对象或数组的地址,深拷贝 是改变了原对象的地址,只将值赋值进去,就算改变其数值,也不会影响原先的数据。

一般数组我会重新创建一个空数组遍历赋值进行深拷贝。

对象的话我会采用JSON.parse(JSON.stringify(obj))的方法将其深拷贝。

JSON.stringify(obj)是将obj对象转化为一个json字符串,JSON.parse()是将括号里的json字符串转化为对象,所以这个功能就是将其转化为一个json字符串,再转化回来,达成一个深拷贝的效果,上面那句话口述可以说成:

对象的话,我会采用JSON.stringify转化为json字符串,再将json字符串parse出来成为一个对象,就达成了深拷贝的效果。

箭头函数和普通函数的区别 ***

什么是箭头函数?

箭头函数就是指以下这个结构的函数

() => {}

其中小括号中的是这个函数的参数,花括号代表这个函数的执行内容。比如我实现一个打印收到的值的函数:

(value)=>{
    console.log(value);
}

为什么要用箭头函数?

因为箭头函数有时候可以替代简单的函数类型,简化了一些代码,有些地方需要接收一个函数,但是这个函数功能又不复杂,可能就一两句话,可以用一个箭头函数表示,箭头函数是匿名函数,也不能重复使用。

比如最经常使用的定时器功能,定时器setTimeout最基础的用法有两个参数,第一个参数是接收一个函数,第二个参数是一个时间,他可以在接收的规定时间之后,运行接收到的函数。通常我们可以在这里使用箭头函数,比如实现一个三秒后打印一句话的功能:

setTimeout(()=>{
    console.log('一句话...');
},3000)

答:箭头函数没有自己的this指向, 他的this指向永远都是自己的作用域,而普通的函数this是可以改变的,也就是谁调用它,它的this指向就是谁。

箭头函数是一个匿名函数,它不能复用,也没有原型链

怎么理解原型链 ****

通俗易懂方式简单理解原型链

原型链通俗易懂的理解就是可以把它想象成一个链条,互相连接构成一整串链子!

而原型链中就是实例和原型之间的链接。每个函数都有一个prototype属性,这个prototype属性就是我们的原型对象,我们拿这个函数通过new构造函数创建出来的实例对象,这个实例对象自己会有一个指针(_proto_)指向他的构造函数的原型对象!这样构造函数和实例对象之间就通过( _proto_ )连接在一起形成了一条链子。

你平时在浏览器中,输入url访问网站的一瞬间,都发生了什么事情?  *****

1.你输入的网址/域名被发送到了DNS服务器,通过DNS服务器获取到对应的IP地址

dns是一个域名服务,可以理解为一个公共的数据库。

平时想访问一个网站需要访问IP,也就是类似于192.168.0.1

而我们输入的网址就是通过DNS来访问数据库,来查找这个网址对应的IP到底是多少。

2.拿到IP后,我们开始对目标IP发起TCP连接 (三次握手)

TCP相关知识正在施工,还没写完

3.确认TCP成功后,浏览器开始正式的发送一个页面的请求

4.服务器收到请求后,发送页面给浏览器

5.浏览器通过收到的页面(html这些)开始构建DOM树,也就是把这个页面渲染出来

6.如果要关闭的话,再对服务器进行TCP关闭连接(四次挥手)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值