No110.精选前端面试题,享受每天的挑战和学习

No110.精选前端面试题,享受每天的挑战和学习_第1张图片

文章目录

    • 用闭包的原理可以做什么
    • 作用域是什么?
      • 1. 全局作用域(Global Scope)
      • 2. 函数作用域(Function Scope)
      • 3. 块级作用域(Block Scope)
    • url到浏览器的一个过程有哪些步骤?
      • 1. URL 解析
      • 2. DNS 解析
      • 3. 建立连接
      • 4. 发送请求
      • 5. 服务器处理请求
      • 6. 响应返回
      • 7. 接收响应
      • 8. 渲染页面
      • 9. 显示页面
    • 登录拦截怎么实现
      • 1. 用户认证
      • 2. 路由拦截
      • 3. 检查登录状态
      • 4. 重定向到登录页面
      • 5. 登录后的处理
    • 附录:「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️⭐️)

「作者简介」:前端开发工程师 | 蓝桥云课签约作者 | 技术日更博主 | 已过四六级
「个人主页」:阿珊和她的猫
「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️⭐️)

  • Vue.js 和 Egg.js 开发企业级健康管理项目
  • 带你从入门到实战全面掌握 uni-app

用闭包的原理可以做什么

闭包是指函数内部创建的函数与其相关的词法环境的组合

通过闭包,内部函数可以访问外部函数作用域中的变量和参数,即使外部函数已经执行完毕。

闭包提供了一种有效的方式来维护函数内部状态和数据的私有性,并且可以用于实现许多有用的功能。

下面是闭包的一些常见应用场景:

  1. 实现私有变量和函数:通过闭包可以创建私有作用域,实现私有变量和函数,防止它们被外部访问和修改

  2. 封装数据和行为:通过闭包可以创建一个对象,其中包含了私有数据和公共方法,实现了封装的效果

  3. 延迟函数的执行:通过闭包可以将函数的执行延迟到特定的时机,例如使用setTimeout()函数,在一定时间后执行闭包函数

  4. 实现记忆化:通过闭包可以缓存函数的计算结果,避免重复计算,提高函数的性能

  5. 创建模块化代码:通过闭包可以创建模块化的代码结构,将相关的变量和函数进行封装,同时又提供了对外的接口

  6. 创建回调函数或事件处理函数:闭包可以用于创建回调函数或事件处理函数,以便在适当的时候执行

需要注意的是,闭包可能会导致内存泄漏的问题。由于闭包会引用外部函数的作用域,即使外部函数执行完毕,内存中依然保留着对外部函数作用域的引用。如果闭包没有被正确地释放,内存占用可能会增加。因此,在使用闭包时,需要注意对不再使用的闭包进行释放,以避免内存泄漏。

作用域是什么?

作用域是指变量在程序中的可访问性和可见性的范围
它规定了在哪些地方和如何能够访问变量。
作用域决定了变量的生命周期和可见性,并且在程序执行期间起作用。

在大多数编程语言中,包括JavaScript,存在以下几种常见的作用域类型:

1. 全局作用域(Global Scope)

全局作用域是最外层的作用域,定义在程序的顶层,对整个程序都是可见和可访问的。在全局作用域内定义的变量可以被程序中的任何部分访问。

2. 函数作用域(Function Scope)

函数作用域是在函数内部定义的作用域。在函数作用域中定义的变量只能在函数内部访问,外部代码无法访问函数作用域内的变量。

3. 块级作用域(Block Scope)

块级作用域是在代码块(通常指由花括号 {} 包围的一段代码)内定义的作用域。在块级作用域中定义的变量只能在块级作用域内部访问,外部代码无法访问它们。在ES6中引入的letconst关键字使得JavaScript有了块级作用域的概念。

作用域规则决定了变量的可见性和访问权限。在变量被使用时,会按照以下规则进行作用域查找:

  1. 首先,在当前作用域内查找变量。如果找到了,则使用该变量。
  2. 如果在当前作用域内未找到变量,则向上一级作用域进行查找
  3. 如果在上一级作用域中找到变量,则使用该变量。
  4. 如果在所有的作用域中都没有找到变量,则会报错。

作用域对于程序的正确性和可维护性非常重要。理解作用域的原理可以帮助我们编写出结构清晰、逻辑正确的代码,并且避免变量名冲突或意外的变量修改等问题。

url到浏览器的一个过程有哪些步骤?

将 URL 显示在浏览器中,并展示网页内容是一个多步骤的过程。下面是常见的 URL 到浏览器的一些步骤:

1. URL 解析

浏览器首先解析输入的 URL。它会将 URL 切分为不同的组成部分,例如协议(如HTTP或HTTPS)、主机名、端口号、路径等。

2. DNS 解析

浏览器根据主机名(例如www.example.com)发送 DNS 请求,将其转换为服务器的 IP 地址。浏览器会首先检查缓存中是否有对应的 IP 地址,如果没有,则会向 DNS 服务器发送请求以获取 IP 地址。

3. 建立连接

通过使用 IP 地址和端口号,浏览器与服务器建立网络连接。对于 HTTP,通常使用 TCP 协议进行连接

4. 发送请求

浏览器发送一个 HTTP 请求到服务器,其中包括请求方法(如 GET、POST)、请求头信息、请求体等。请求头包括一些额外的信息,例如浏览器类型、所需语言等。

5. 服务器处理请求

服务器接收到请求后,根据请求中的信息执行相应的处理。这可能包括读取数据库、处理请求参数、生成动态页面等。

6. 响应返回

服务器根据请求的处理结果生成一个 HTTP 响应。
该响应包含由服务器返回的数据,以及响应头信息(例如响应状态码、内容类型等)。

7. 接收响应

浏览器接收到服务器的响应后,开始读取响应内容。它会根据响应中的内容类型确定如何处理响应,例如渲染 HTML 页面、加载并执行 JavaScript、显示文件下载链接等。

8. 渲染页面

如果响应是一个 HTML 页面,浏览器会解析 HTML、CSS 和 JavaScript,并将其渲染为可视化的网页
它会构建文档对象模型(DOM)表示网页的结构,然后将 CSS 样式应用于 DOM,最后执行 JavaScript 来实现页面上的交互和动态效果

9. 显示页面

浏览器使用操作系统的图形渲染功能将渲染后的页面显示在用户界面上。用户可以看到网页内容,并与页面进行交互。

这些步骤并不是严格的顺序,有些步骤可以同时进行。此外,每个浏览器的实现细节可能会有所不同,但它们的基本原理是相似的。

登录拦截怎么实现

要实现登录拦截,你可以遵循以下一般步骤:

1. 用户认证

首先,你需要实现用户认证功能,包括用户注册、登录和登出
这可以通过使用用户身份验证库或编写自己的身份验证逻辑来完成。
用户认证通常涉及用户名和密码验证,以及将相关的认证令牌(如CookieToken)发送给客户端。

2. 路由拦截

在你的应用程序中,选择需要进行登录拦截的路由或特定页面
通常,拦截需要登录的页面,例如用户个人资料或敏感数据的页面。

3. 检查登录状态

在路由拦截器中的每个受保护的路由之前,检查用户的登录状态
这可以通过检查认证令牌的有效性或验证用户的登录状态来实现。

4. 重定向到登录页面

如果用户未经身份验证,将其重定向到登录页面或要求其进行登录
这可以通过将浏览器的URL重定向到登录页面,或者在前端路由中导航到登录页面来实现。

5. 登录后的处理

一旦用户完成登录,你可以将登录状态保存在客户端(如CookieSession)或服务器端,以便在下次请求时验证用户身份。

具体的实现方法会根据你所使用的技术栈和框架而有所不同。
很多现代的前端框架(如Vue、React和Angular)都提供了路由拦截的功能,可以方便地实现登录拦截
此外,服务器端(如Node.js或Django)也可以通过中间件或装饰器来实现登录拦截。

无论使用哪种方法,关键是确保只有经过身份验证的用户才能访问受保护的资源。通过登录拦截,你可以增强应用程序的安全性,并为用户提供个性化的体验。

附录:「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️⭐️)

Vue.js 和 Egg.js 开发企业级健康管理项目
带你从入门到实战全面掌握 uni-app

你可能感兴趣的:(前端面试册(校招和社招),前端,学习,面试)