2024/03/05 每日3题

问题1: 理解闭包,以及使用场景

  闭包是一个重要的编程概念,它指的是在一个函数内部定义的函数能够访问其外部函数的词法作用域(包括变量和参数),即使外部函数已经执行结束并离开了作用域。换句话说,闭包允许一个函数继续访问其定义时的词法环境。

要理解闭包的概念,可以从以下几个方面来思考:

  1. 函数作用域: 在 JavaScript 中,每个函数都有自己的词法作用域,其中包含了在函数内定义的变量、函数和参数。这些变量和函数在函数执行时创建,并且在函数执行结束后会被销毁。

  2. 内部函数: JavaScript 允许在函数内部定义另一个函数,这个内部函数可以访问外部函数的作用域,即使外部函数已经执行结束。这种内部函数捕获了其定义时的词法作用域,形成了闭包。

  3. 词法作用域链: 当内部函数访问变量或函数时,JavaScript 引擎会先在内部函数的作用域中查找,如果找不到,就会沿着词法作用域链向外部作用域查找,直到找到变量或函数为止。

  闭包在 JavaScript 中具有多种应用场景,包括但不限于:

  • 实现模块化和封装:通过闭包可以创建私有变量和函数,实现模块化的代码结构。
  • 保存状态:闭包可以用来保存函数执行时的状态,实现类似于对象的行为。
  • 作为回调函数:闭包可以用作回调函数,可以访问包含它的外部函数的作用域。

问题2: 小程序,taro2升级taro3的差异,区别

1. 架构变化: Taro3采用了新的架构,底层调整了整个编译器的架构,从而提升了整体性能和稳定性

2. TypeScript 支持: Taro 3 对 TypeScript 的支持更加完善,包括编译性能优化、类型推导改进等,使得开发者在使用 TypeScript 时能够获得更好的体验。

3. 编译优化: Taro 3 对小程序和 H5 的编译优化进行了改进,提升了编译速度和整体性能。

4. 依赖更新: Taro 3 更新了内部依赖的版本,使得整体的依赖关系更加清晰和稳定。

5. 新功能特性: Taro 3 会引入一些新的功能特性,以满足开发者在多端开发中的需求,比如新的 API、组件等。

6. 基础组件现在全部使用 Web Components 构建,路由系统也完全与前端框架解耦,因此在 H5 端 Taro 也实现了跨框架。不管开发者使用的是 React、Vue 还是 Nerv,都可以同时运行在各种小程序和 H5 上。
具体改动如下:
1. 文件调整
babel 配置,在项目目录下新增了 babel.config.js 配置文件来配置 babel,为此,请去掉编译配置(config/index.js)中的 babel 配置,请参见说明
项目/页面配置,新增项目/页面同名的配置文件 *.config.js(或者 *.config.ts), * 代表页面/项目文件的文件名,config 文件必须和页面/项目文件在同一文件夹, 比如app.config.js, index.config.js

2. 项目依赖调整
在 Taro 3 中有很多旧的项目依赖已经不再需要了,例如之前做平台运行时兼容的 @tarojs/taro-weapp、@tarojs/taro-alipay 等等,
而同时也新增了一些新依赖项,例如 @tarojs/runtime 等,具体 Taro 3 会需要哪些依赖,可以通过创建 Taro 示例项目看到,在这里我们列出了 Taro 3 目前仍需使用的 NPM 包名及其具体作用。‘

3. 代码调整
import { Component } from "@tarojs/taro";
// 改成
import { Component } from 'react';
4. app.js文件改动
复制代码
// App 代码调整,对于 React/Nerv 项目,项目入口 App 的 render 函数固定修改为返回 this.props.children,如下
import { Component } from 'react'
import './app.scss'

class App extends Component {
render() {
return this.props.children
}
}
export default App
复制代码

5. 路由功能,使用 getCurrentInstance().router 替代 this.$router,getCurrentInstance 作为新 API 从 @tarojs/taro 引入

6. 不再需要传入 $scope,在 Taro 1/2 时调用某些 API 需要传入 this.$scope,相当于传入组件对应的小程序原生对象,而 Taro 3 则不再需要,
比如在 Taro 3 中调用 Taro.createSelectorQuery() 时不再需要传入 $scope,直接调用即可。
但是在小程序插件还是需要传入 $scope

7. 样式调整,组件直接受全局样式影响,不再需要设置 addGlobalClasses

8. 分享按钮的属性由dataShareActivity改成data-shareActivity={true}
9. 获取点击触发位置event.touches[0].y改成event.touches[0].clientY
  • 网络的定义和分类: 网络是指连接在一起的多台计算机,使它们能够相互通信和共享资源。根据规模和范围的不同,网络可以分为局域网(LAN)、城域网(MAN)、广域网(WAN)、互联网等不同类型。

  • OSI 模型和 TCP/IP 协议栈: OSI(开放式系统互联)模型和 TCP/IP 协议栈是网络通信的两种主要参考模型。OSI 模型将网络通信分为七层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。TCP/IP 协议栈包括四层,分别是网络接口层、网络层、传输层和应用层。

  • IP 地址和子网掩码: IP 地址是网络上设备的标识符,用于唯一标识每个网络设备。子网掩码用于划分 IP 地址的网络部分和主机部分,以便于进行子网划分和寻址。

  • 网络设备: 常见的网络设备包括路由器、交换机、集线器、网桥等。它们在网络中起着连接、转发、过滤、转换数据的作用。

  • 网络拓扑结构: 网络拓扑结构是指网络中设备之间的物理连接方式,包括星型拓扑、总线拓扑、环形拓扑、树型拓扑、网状拓扑等,每种拓扑结构都有其特点和适用场景。

  • 网络协议: 网络通信中常用的协议包括 TCP、UDP、IP、ICMP、ARP、HTTP、FTP、SMTP 等,它们规定了数据在网络中的传输格式、传输规则和通信过程。

  • 网络地址转换(NAT): NAT 是一种在网络路由器上进行的地址转换技术,用于将私有 IP 地址转换为公有 IP 地址,以便局域网中的设备可以通过单一公网 IP 地址访问互联网。

  • 数据传输原理: 数据在网络中的传输是通过数据包的方式进行的,每个数据包包含了源地址、目标地址、数据内容等信息,它们通过网络设备进行转发和交换,最终到达目标设备。

明天详细了解

a. TCP vs UDP
b. HTTP vs TCP
c. HTTP vs HTTPS
d. 1.0 vs 2.0

 
posted @   君临天下之徐少  阅读(6)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示