面试笔记
一.常见的跨域方式 ?
- JSONP:
JSONP(JSON with Padding)是一种允许跨域请求数据的技术。它利用了script标签可以跨域加载资源的特性。使用JSONP时,服务器返回的不是纯JSON数据,而是一个JavaScript函数调用。客户端通过定义一个回调函数来接收这个函数调用,从而获取数据。 - CORS:
CORS(Cross-Origin Resource Sharing)是现代浏览器支持的一种跨源通信机制。它允许服务器通过设置HTTP响应头Access-Control-Allow-Origin来指定哪些域名可以访问其资源,从而允许或拒绝某些跨域请求。也是广泛的解决方案。 - 正向代理
先搭建一个属于自己的代理服务器- 1、用户发送请求到自己的代理服务器
- 2、自己的代理服务器发送请求到服务器
- 3、服务器将数据返回到自己的代理服务器
- 4、自己的代理服务器再将数据返回给用户
- 反向代理
- 1、用户发送请求到服务器(访问的其实是反向代理服务器,但用户不知道)
- 2、反向代理服务器发送请求到真正的服务器
- 3、真正的服务器将数据返回给反向代理服务器
- 4、反向代理服务器再将数据返回给用户
- postMessage是HTML5中新引入的一种跨文档通信方式,允许不同源的窗口之间安全地传递消息。使用postMessage可以在不同源的页面之间进行通信,而不受同源策略的限制。
这些技术都是解决Web开发中跨源问题的不同方法,开发者可以根据具体需求和场景选择合适的技术来实现跨域请求或通信。
二.let, const, var 的区别 ?
作用域:
-
var: 声明的变量具有函数作用域,如果在一个块(例如一个if语句或for循环)中声明,它仍然可以在整个函数中访问。
let 和 const: 声明的变量具有块作用域,这意味着它们只能在声明它们的块内部访问。
可变性: -
var 和 let: 允许重新赋值(即变量的值可以改变)。
const: 声明的变量是常量,一旦赋值后不能重新赋值。如果尝试重新赋值,会抛出一个错误。
提升:
- var: 变量声明会被提升到其所在函数或全局作用域的顶部,但初始化(赋值)不会提升。
- let 和 const: 不会被提升,它们只在声明它们的语句被执行时才存在。如果在声明之前访问这些变量,会得到undefined(对于let)或ReferenceError(对于const)。
全局对象属性:
- 当使用 var 在全局作用域中声明变量时,它会成为一个全局对象的属性(在浏览器中是 window 对象)。
使用 let 和 const 声明的全局变量不会成为全局对象的属性。
声明方式 变量提升 暂时性死区 重复声明 初始值 作用域
var 允许 不存在 允许 不需要 非块级
let 不允许 存在 不允许 不需要 块级
const 不允许 存在 不允许 需要 块级
三.cookie, localStorage,sessionStorage 的区别?
存储方式 作用与特性 存储数量及大小
- cookie
存储方式
存储用户信息,获取数据需要与服务器建立连接。
以路径存储,上层路径不能访问下层的路径cookie,下层的路径cookie可以访问上层的路径cookie
作用与特性
可存储的数据有限,且依赖于服务器,无需请求服务器的数据尽量不要存放在cookie 中,以免影响页面性能。
可设置过期时间。
存储数量及大小 将cookie控制在4095B以内,超出的数据会被忽略。
IE6或更低版本 最多存20个cookie;
IE7及以上
版本 多可以有50个;
Firefox多 50个;
chrome和Safari没有做硬性限制。
cookie最大特征就是可以在页面与服务器间互相传递,当发送或者接受数据时自动传递
- localStorage
存储客户端信息,无需请求服务器。
数据永久保存,除非用户手动清理客户端缓存。
开发者可自行封装一个方法,设置失效时间。 5M左右,各浏览器的存储空间有差异。
任何地方都可以存都可以取
操作简单
- sessionStorage
存储客户端信息,无需请求服务器。
数据保存在当前会话,刷新页面数据不会被清除,结束会话(关闭浏览器、关闭页面、跳转页面)数据失效。
5M左右,各浏览器的存储空间有差异。
同页面不同窗口中数据不会共享