JavaScript常见面试题

一、浏览器为什么要阻止跨域请求?

因为浏览器的"同源政策","同源政策"主要解决浏览器的安全问题,"同源"是协议、域名和端口都相同,只要有一个不同就是非同源,就会有跨域问题

二、如何解决跨域?

(1)使用jsonp跨域;(2)postMessage跨域 ;(3)使用cors(跨域资源共享);(4)WebSocket协议跨域 ;(5)nodejs中间件代理跨域( (用的最多)通过中间件进行转发到非同源地址,请求的还是同源地址)

三、每次跨域请求会达到服务端吗?

每次的跨域请求都会正常发出,服务端也会正常返回,但是响应时被浏览器拦截了,所以跨域请求会到达服务端

四、同步任务和异步任务

同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。
异步任务指的是,不进入主线程、而进入"任务队列"的任务,只有等主线程任务执行完毕,"任务队列"的任务才会进入主线程执行。

五、宏任务和微任务

异步任务分为 宏任务 和 微任务
宏任务
常见的宏任务:settimeoutsetInterval、script(最外层的script标签);
会压入到调用栈中,宏任务会等到调用栈清空之后再执行;
微任务
常见的微任务:promise (async await);
会在调用栈清空时立即执行(优先级大于宏任务), 调用栈中加入的微任务会立马执行。

六、什么是闭包?

闭包的定义
闭包是指能够访问另一个函数作用域中的变量的一个函数。 在js中,只有函数内部的子函数才
能访问局部变量, 所以闭包可以理解成 “定义在一个函数内部的函数”。
闭包的作用
可以突破作用域链,将函数内部的变量和方法传递到外部,让外部函数可以访问到内部
函数的变量和方法。
闭包的优点
正常函数在执行完之后,函数里面声明的变量会被垃圾回收机制处理掉。但是形成闭包的函
数在执行之后,变量不会被垃圾机制回收,依旧存在内存中
闭包的缺点
因为变量不会被回收,所以内存中一直存在,耗费内存

七、var、let、const的区别?

(1)var 声明的变量有变量提升的特性,而 let、const 没有;
(2) var 声明的是全局变量,而 let 和 const声明的变量是局部变量, 块级作用域外不能访问;
(3)同一作用域下 let 和 const 不能重复声明同名变量,而var可以;
(4)const声明的是常量必须赋初值一旦声明不能再次赋值修改,如果声明的是复合类型数据,可以修改其属性。

八、js中的基础数据类型有哪几种? 包装对象是什么?​​

六种,undefiend, null, number, string, symbol, boolean。
基础数据类型临时创建的临时对象,称为包装对象。其中 number、boolean 和 string 有包装
对象,代码运行的过程中会找到对应的包装对象,然后包装对象把属性和方法给了基本类型
包装对象被系统进行销毁

九、this指向问题

普通函数的this指向调用者,箭头函数没有自己的this,会继承父级的this。

可以分为六种情况:
(1)script中直接定义的普通函数
this 指向 window 对象, 严格模式下为 undefiend
(2)对象里调用的this
指向调用函数的那个对象,this: 谁调用就指向谁
(3)构造函数以及中的this
this指向new出来的实例对象
(4)绑定事件函数的this
指向调用者
(5)定时器中的this
定时器中的 this 指向 window,因为定时器中采用回调函数作为处理函数,而回调函数的 this
指向 window。
(6)箭头函数中的this
箭头函数没有自己的 this,会继承其父作用域的 this

十、call、apply、bind

作用
改变函数内部 this 的指向
区别
1. call 和 apply 会调用函数,而 bind 不会调用
2. call 和 bind 的参数是参数列表逐个传入,一一对应,而 apply 的参数必须为数组形式

你可能感兴趣的:(前端,javascript,开发语言,面试题)