前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【JS】347- 理解JavaScript中的变量、范围和提升

【JS】347- 理解JavaScript中的变量、范围和提升

作者头像
pingan8787
发布于 2019-09-17 07:44:44
发布于 2019-09-17 07:44:44
1.9K00
代码可运行
举报
文章被收录于专栏:前端自习课前端自习课
运行总次数:0
代码可运行

变量是许多编程语言的基本组成部分,也是新手需要学习的第一个也是最重要的概念。JavaScript中有许多不同的变量属性,以及命名变量时必须遵循的一些规则。

在JavaScript中,有三个关键字用于声明变量——var、let和const——每个关键字都会影响代码对变量的不同解释。

本教程将介绍什么是变量,如何声明和命名变量,并进一步研究var、let和const之间的区别。我们还将回顾提升的影响以及全局和局部作用域对变量行为的重要性。

理解变量

变量是用于存储值的命名容器。我们可能多次引用的一条信息可以存储在一个变量中,供以后使用或修改。在JavaScript中,变量中包含的值可以是任何JavaScript数据类型,包括数字、字符串或对象。

在今天的JavaScript所基于的ECMAScript 2015 (ES6)语言规范之前,只有一种方法来声明变量——使用var关键字。因此,大多数较老的代码和学习资源将只对变量使用var。我们将在下面单独一节讨论var、let和const关键字之间的区别。

我们可以使用var来演示变量本身的概念。在下面的示例中,我们将声明一个变量,并为其赋值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Assign the string value Sammy to the username identifier
var username = "sammy_shark";

本声明由以下几部分组成:

  • 使用var关键字声明变量
  • 变量名(或标识符),用户名
  • 赋值操作,由=语法表示
  • 分配的值“sammy_shark”

现在我们可以在代码中使用username。JavaScript将记住username表示字符串值sammy_shark。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Check if variable is equal to value
if (username === "sammy_shark") {
  console.log(true);
  }

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
true

如前所述,变量可以用来表示任何JavaScript数据类型。在本例中,我们将使用字符串、数字、对象、布尔值和null值声明变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Assignment of various variables
var name = "Sammy";
var spartans = 300;
var kingdoms = [ "mammals", "birds", "fish" ];
var poem = { roses: "red", violets: "blue" };
var success = true;
var nothing = null;

使用console.log,我们可以看到特定变量中包含的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Send spartans variable to the console
console.log(spartans);

输出:300

变量将数据存储在内存中,稍后可以访问和修改这些数据。变量也可以重新分配,并给定一个新值。下面的简化示例演示了如何将密码存储到变量中,然后进行更新。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//为password变量赋值
var password = "hunter2";
//用一个新值重新分配变量值
password = "hunter3";
console.log(password);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'hunter3'

在实际的程序中,密码很可能安全地存储在数据库中。然而,这个例子说明了一种情况,在这种情况下,我们可能需要更新变量的值。password的值是hunter2,但是我们将其重新分配给了hunter3,这是JavaScript从那时起可以识别的值。

命名变量

变量名在JavaScript中称为标识符。我们讨论了在理解JavaScript语法和代码结构时命名标识符的一些规则,总结如下:

  • 变量名只能由字母(a-z)、数字(0-9)、美元符号($)和下划线(_)组成
  • 变量名不能包含任何空白字符(制表符或空格)
  • 数字不能是任何变量的名称开头
  • 保留的关键字不能用作变量的名称
  • 变量名区分大小写

JavaScript还习惯在使用var或let声明的函数和变量的名称中使用驼峰大小写(有时作为驼峰大小写进行样式化)。这是一种将第一个单词小写,然后将后面每个单词的第一个字母大写,中间没有空格的做法。除了一些例外,大多数非常量的变量都遵循这种约定。使用const关键字声明的常量变量的名称通常都是大写的。

这可能看起来像要学习很多规则,但很快就会成为编写有效和常规变量名称的第二天性。

var、let和const之间的区别

JavaScript有三个不同的关键字来声明变量,这给语言增加了额外的复杂性。三者之间的区别是基于范围、提升和重新分配。

关键字

范围

变量提升

可以重新分配

可以重新定义

var

功能范围

Yes

Yes

Yes

let

阻止范围

No

Yes

No

const

阻止范围

No

No

No

您可能想知道应该在自己的程序中使用这三种方法中的哪一种。一个普遍接受的做法是尽可能多地使用const,并在循环和重新分配的情况下使用let。通常,在处理遗留代码之外可以避免var。

变量作用域

JavaScript中的作用域是指代码的当前上下文,它决定了变量对JavaScript的可访问性。范围的两种类型是局部的和全局的:

  • 全局变量是在块之外声明的变量
  • 局部变量是在块内声明的变量

在下面的示例中,我们将创建一个全局变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//初始化一个全局变量
var creature = "wolf";

我们知道变量可以重新分配。使用局部作用域,我们实际上可以创建与外部作用域中的变量同名的新变量,而无需更改或重新分配原始值。

在下面的示例中,我们将创建一个全局species变量。函数内部是一个具有相同名称的局部变量。通过将它们发送到控制台,我们可以看到变量的值如何根据范围而不同,并且原始值不会更改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//初始化一个全局变量
var species = "human";
function transform() {
//初始化一个局部的、函数作用域的变量
  var species = "werewolf";
  console.log(species);
}
//记录全局和局部变量
console.log(species);
transform();
console.log(species);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
human
werewolf
human

在本例中,局部变量是函数作用域的。使用var关键字声明的变量总是函数作用域,这意味着它们将函数识别为具有独立作用域。因此,这个局部作用域的变量不能从全局作用域访问。

然而,新的关键字let和const是块范围的。这意味着从任何类型的块(包括函数块、if语句、for和while循环)创建一个新的本地范围。

为了说明函数作用域变量和块作用域变量之间的区别,我们将使用let在if块中分配一个新变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var fullMoon = true;
//初始化一个全局变量
let species = "human";
if (fullMoon) {
//初始化一个块范围的变量
  let species = "werewolf";
  console.log(`It is a full moon. Lupin is currently a ${species}.`);
}
console.log(`It is not a full moon. Lupin is currently a ${species}.`);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
It is a full moon. Lupin is currently a werewolf.
It is not a full moon. Lupin is currently a human.

在此示例中,species变量具有一个值global(human),另一个值local(werewolf)。var但是,如果我们使用,则会有不同的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//使用var初始化一个变量
var species = "human";
if (fullMoon) {
//尝试在一个块中创建一个新变量
  var species = "werewolf";
  console.log(`It is a full moon. Lupin is currently a ${species}.`);
}

console.log(`It is not a full moon. Lupin is currently a ${species}.`);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
It is a full moon. Lupin is currently a werewolf.
It is not a full moon. Lupin is currently a werewolf.

在这个例子的结果中,全局变量和块范围的变量都以相同的值结束。这是因为您不是使用var创建一个新的本地变量,而是在相同的范围内重新分配相同的变量。var不能识别是否属于不同的新范围。通常建议声明块范围的变量,因为它们生成的代码不太可能无意中覆盖变量值。

变量提升

到目前为止,在大多数示例中,我们已经使用var声明了一个变量,并使用一个值初始化了它。在声明和初始化之后,我们可以访问或重新分配变量。

如果我们试图在变量被声明和初始化之前使用它,它将返回undefined。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//在声明变量之前尝试使用它
console.log(x);
/ /变量赋值
var x = 100;

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
undefined

但是,如果省略var关键字,就不再声明变量,而是初始化它。它将返回一个ReferenceError并停止脚本的执行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//在声明变量之前尝试使用它
console.log(x);
//没有var的变量赋值
x = 100;

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ReferenceError: x is not defined

原因在于提升,这是JavaScript的一种行为,其中变量和函数声明被移到它们作用域的顶部。由于只挂起实际声明,而没有初始化,因此第一个示例中的值返回未定义的值。

为了更清楚地演示这个概念,下面是我们编写的代码以及JavaScript如何解释它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// The code we wrote
console.log(x);
var x = 100;
// How JavaScript interpreted it
var x;
console.log(x);
x = 100;

JavaScript在执行脚本之前将x保存为内存作为变量。由于它在定义之前仍然被调用,因此结果是未定义的而不是100.但是,它不会导致ReferenceError并停止脚本。

尽管var关键字实际上并未更改var的位置,但这有助于表示提升的工作原理。但是,这种行为可能会导致问题,因为编写此代码的程序员可能希望x的输出为true,而不是undefined。

在下一个例子中,我们还可以看到提升是如何导致不可预测的结果的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//在全局范围内初始化x
var x = 100;
function hoist() {
//不应影响编码结果的条件
  if (false) {
      var x = 200;
  }
  console.log(x);
}

hoist();

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
undefined

在本例中,我们声明x全局为100。根据if语句,x可以更改为200,但是由于条件为false,所以它不应该影响x的值。

这种不可预测的行为可能会在程序中引起bug。由于let和const是块范围的,所以它们不会以这种方式提升,如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//在全局范围内初始化x
let x = true;function hoist() {
//在函数作用域中初始化x
 if (3 === 4) {
      let x = false;
  }
  console.log(x);
}

hoist();

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
true

变量的重复声明(这在var中是可能的)将在let和const中抛出一个错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//试图覆盖用var声明的变量
var x = 1;
var x = 2;

console.log(x);

输出:2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//试图覆盖用let声明的变量
let y = 1;
let y = 2;

console.log(y);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Uncaught SyntaxError: Identifier 'y' has already been declared

总之,使用var引入的变量有可能受到提升的影响,提升是JavaScript中的一种机制,其中变量声明被保存到内存中。这可能导致代码中出现未定义的变量。let和const的引入解决了这个问题,它在试图在声明变量之前使用该变量或多次声明该变量时抛出一个错误。

常量

许多编程语言都有常量,这些常量是不能修改或更改的值。在JavaScript中,const标识符是根据常量建模的,不能重新分配分配给const的值。

将所有const标识符都写成大写是常见的约定。这将它们与其他变量值区分开来。

在下面的示例中,我们使用const关键字将变量SPECIES初始化为常量。试图重新分配变量将导致错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//给const赋值
const SPECIES = "human";

//尝试重新分配值
SPECIES = "werewolf";

console.log(SPECIES);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Uncaught TypeError: Assignment to constant variable.

因为不能重新分配const值,所以需要同时声明和初始化它们,否则也会抛出错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//声明,但不初始化const
const TODO;

console.log(TODO);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Uncaught SyntaxError: Missing initializer in const declaration

不能在编程中更改的值称为不可变值,而可以更改的值是可变的。虽然const值不能重新分配,但是它们是可变的,因为可以修改用const声明的对象的属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//创建一个具有两个属性的CAR对象
const CAR = {
    color: "blue",
    price: 15000}
//修改CAR的属性
CAR.price = 20000;

console.log(CAR);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ color: 'blue', price: 20000 }

常量非常有用,可以让将来的自己和其他程序员清楚地认识到,不应该重新分配预期的变量。如果您希望将来修改某个变量,那么您可能希望使用let来声明该变量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端自习课 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
WLAN Mesh技术介绍,精华!
在传统的无线网络中,AP作为网络的末端,只用于收发无线终端的报文,不能作为网络设备之间的流量中转设备。
网络技术联盟站
2021/10/29
1.7K0
WLAN Mesh技术介绍,精华!
无线技术:瘦AP和胖AP的爱恨情仇
无线AP(Access Point):即无线接入点,它用于无线网络的无线交换机,也是无线网络的核心,无线AP同样也是无线路由器(含无线网关、无线网桥)等类设备的统称,其作用是把局域网里通过双绞线传输的有线信号(即电信号)经过编译,转换成无线电信号传递给电脑、 手机等无线终端,与此同时,又把这些无线终端发送的无线信号转换成有线信号通过双绞线在局域网内传输。无线AP是移动计算机用户进入有线网络的接入点,主要用于宽带家庭、大楼内部以及园区内部,可以覆盖几十米至上百米。无线AP(又称会话点或存取桥接器)是一个包含很广的名称,它不仅包含单纯性无线接入点(通过这种方式,形成无线覆盖,即无线局域网。我们通常说AP,都是指下文里的瘦AP。
网络技术联盟站
2023/03/01
2.1K0
无线技术:瘦AP和胖AP的爱恨情仇
瘦AP如何通过AC进行控制?无线组网架构,全网最全;建议收藏。
AC和AP直连或者AC和AP之间通过二层网络进行连接的网络称为二层组网,如图所示。二层组网比较简单,AC通常配置为DHCP服务器,无需配置DHCP代理,简化了配置。由于AC和AP在同一广播域中,因此AP通过广播很容易就能发现AC。二层组网适用于简单的组网,但是由于要求AC和AP在同一个二层网络中,所以局限性较大,不适用于有大量三层路由的大型网络。
Ponnie
2021/07/05
6.3K0
瘦AP如何通过AC进行控制?无线组网架构,全网最全;建议收藏。
无线漫游详解:概念、分类及原理
无线漫游是指在相同SSID(Service Set Identifier,服务集标识)的无线网络中,确保无线终端STA(如手机、电脑等终端设备)在移动过程中能够保持不间断网络连接的技术。因为在无线局域网中,每个AP(Access Point,无线访问接入点)设备的信号覆盖范围都有限,无线终端用户在通信过程中会从一个AP信号覆盖区进入到另一个AP覆盖区域,为了避免用户在不同的AP之间切换时,网络通讯中断,需要借助无线漫游技术,确保用户设备与新的AP自动关联,与原有AP断开关联,同时保持网络连接的连续性,使用户在移动通信的过程中自由切换且无感知地保持对网络的持续访问。
星融元Asterfusion
2024/09/05
3130
无线漫游详解:概念、分类及原理
无线网络设备中AP和AC是什么?有什么区别?
在当今的数字化时代,无线网络已经成为我们生活中不可或缺的一部分。无论是家庭、办公室还是公共场所,无线网络设备都在为我们提供便捷的网络连接。然而,尽管我们每天都在使用无线网络,但对于其中的关键设备——AP(接入点)和AC(无线控制器),你真的了解吗?
神的孩子都在歌唱
2025/03/05
4260
无线网络设备中AP和AC是什么?有什么区别?
无线组网之CAPWAP协议的隧道建立与维护
LWAPP具有完整的协议框架,定义了详细的报文结构及多方面的控制消息元素,但全新制定的安全机制还需实践验证,而SLAPP使用业界认可的DTLS技术是其亮点。相对前两者而言,CTP和WiCoP实现了集中式WLAN体系结构的基本要求,但考虑不够全面,特别是安全性方面有所欠缺。
Ponnie
2021/07/05
7K0
无线组网之CAPWAP协议的隧道建立与维护
深入解析:WiFi 6与WiFi 7无线漫游技术及其实施方案
802.11k/v/r是WiFi 6中三个与WLAN相关的协议,又称为“快速漫游三协议”,用于解决传统漫游过程中的丢包严重、漫游触发不及时、选择漫游的目标AP不合适等问题。以下是对这三个协议的详细解析:
星融元Asterfusion
2024/09/11
2810
深入解析:WiFi 6与WiFi 7无线漫游技术及其实施方案
关于中大型网络无线对比中小型的区别点
之前标题一直写着小型企业组网,其实这个有点不严谨了,不管是中小型、还是大型,都离不开AP上线、业务配置、然后关联VAP、关联组,然后下发的步骤,区别就是组网环境复杂度 中小型环境(1)出口有路由器或者防火墙(2)有核心交换机(承担有线跟无线的网关)(3)AC+AP (4)接入终端的傻瓜或者可配置交换机 大中型环境(1)双核心热备(堆叠、VRRP)(2)双防火墙(热备)(3)双AC(热备)(4)区域比较多,接入设备、AP数量较多(5)有分支,需要统一管理等(6)认证方式多样化需求密码认证、微信认证、portal网页认证、dot1x认证、MAC认证
网络之路一天
2024/01/08
4450
关于中大型网络无线对比中小型的区别点
无线技术之分层AC技术介绍
分层AC是一种对AC进行集中控制与分级管理的网络架构。该网络架构下,由Local AC负责完成AP接入及管理功能;由Central AC负责完成网络的管理控制和集中认证等非实时性全局业务,同时Central AC也具备AP接入和数据转发功能。
网络技术联盟站
2021/10/29
1.3K0
无线技术之分层AC技术介绍
华为配置访客接入WLAN网络示例(MAC优先的Portal认证)
某企业为了提高WLAN网络的安全性,采用MAC优先的外置Portal认证方式,实现对用户的接入控制。
知孤云出岫
2024/02/07
4640
华为配置访客接入WLAN网络示例(MAC优先的Portal认证)
WLAN产品形态之分层架构
随着移动互联网时代的来临,无线数据流量呈现爆发式增长,各大运营商也越来越多依靠WLAN来承载这些无线数据流量,大规模进行WLAN网络建设,分担3G网络的压力,让客户体验更加美好、无处不在的优质无线网络服务。百万规模的WLAN网络建设,对于网络架构提出了新的要求。针对上述需求,分层AC架构应运而生。 一、WLAN产品架构背景介绍 随着无线网络的不断发展,WLAN产品构架形态的演变主要经历了三个时期。 1. Fat AP架构 Fat AP是传统的WLAN组网方案,AP本身承担了用户认证、漫游切换、用户数据
SDNLAB
2018/04/02
1.3K0
WLAN产品形态之分层架构
MESH无线音视频自组网应用方案
Mesh无线自组网系统是采用全新的“无线网格网”理念设计的移动宽带多媒体通信系统。系统所有节点在非视距、快速移动条件下,利用无中心自组网的分布式网络构架,可实现多路语音、数据、图像等多媒体信息的实时交互。同时,系统支持任意网络拓扑结构,每个节点设备可随机快速移动,系统拓扑可随之快速变化更新且不影响系统传输,整体系统部署便捷、使用灵活、操作简单、维护方便。
NTP网络同步时钟
2022/03/17
1.7K0
MESH无线音视频自组网应用方案
华为——配置内部人员接入WLAN网络示例(802.1X认证)
用户接入WLAN网络,使用802.1X客户端进行认证,输入正确的用户名和密码后可以无线上网。且在覆盖区域内移动发生漫游时,不影响用户的业务使用。
知孤云出岫
2023/12/30
9750
华为——配置内部人员接入WLAN网络示例(802.1X认证)
企业级无线局域网(WLAN)架构:高效部署策略与技术指南
属性前言:无线网络直接影响整体网络性能,在当今企业网环境中,已有超过一半的数据流量通过无线信道传输,随着物联网技术的普及,无线网将承载更多的关键业务流量。企业/园区场景的无线网络值得考虑的关键因素有很多,例如终端移动性,AP 漫游能力和覆盖范围、带宽和吞吐量、延迟、信道、射频干扰等。当然,还有网络安全配置和用户认证等等。
星融元Asterfusion
2024/08/13
5670
企业级无线局域网(WLAN)架构:高效部署策略与技术指南
写字楼WLAN网络解决方案设计
通常计算机组网的传输媒介主要依赖铜缆或光缆,构成有线局域网。但有线网络在某些场合要受到布线的限制:布线、改线工程量大;线路容易损坏;网中的各节点不可移动。对正在迅速扩大的连网需求形成了严重的瓶颈阻塞。WLAN就是解决有线网络以上问题而出现的, WLAN为Wireless LAN的简称,即无线局域网。无线局域网是利用无线技术实现快速接入以太网的技术。与有线网络相比,WLAN最主要的优势在于不需要布线,可以不受布线条件的限制。
ICT售前新说
2021/04/30
1.5K0
写字楼WLAN网络解决方案设计
网络设备硬核技术内幕 无线局域网篇 (十五) 怎么可以吃兔兔
虽然白富美对吃兔兔这件事儿一开始略有微词,但吃过几次麻辣兔兔以后也觉得很不错,全力支持老公的事业。这样一来,由于小超养的兔兔非常可爱,宜红烧,宜爆炒,小超一年内把养兔场扩大到了三个分场。
用户8289326
2022/07/27
4430
网络设备硬核技术内幕 无线局域网篇 (十五) 怎么可以吃兔兔
配置小型网络WLAN基本业务示例
本文介绍的WLAN网络是指利用频率为2.4GHz或5GHz的射频信号作为传输介质的无线局域网,相对于有线网络的铺设成本高,不便于网络调整和扩展、位置固定,移动性差等缺点,WLAN网络以其低廉的铺设成本、便捷的网络调整和扩展、灵活的可移动性获得了越来越广泛的应用。
知孤云出岫
2023/12/21
2850
配置小型网络WLAN基本业务示例
3/4G无线接入安全解决方案
伴随着通信网络的高速发展,无线接入从最开始的解决最后一公里的问题,到当今的无线应用已经无所不在。无线接入方式也已从2G、2.5G、3G步入了4G时代。带宽的要求也将不再是主要瓶颈,取而代之的将是安全、稳定、易维护、快速布署及可靠性的要求。
py3study
2020/01/09
2K0
AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线
之前我们已经知道了FATAP与FIT是一对双胞胎一样的兄弟,FAT哥哥能够直接独立使用当AP桥接、路由器等,而弟弟FIT则比较薄弱,独自发挥不出功效,需要一位师傅(AC)来带领,那么弟弟FIT如何能够正常找到一位好师傅(AC)呢,今天我们来了解了解FIT AP上线的过程。
网络之路一天
2024/01/08
1.3K0
AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线
WLAN基本知识之802.11标准「建议收藏」
802.11n突破了原有WiFi标准带宽的瓶颈,它在802.11n基础上,增加了空间流数从4到8,信道从40Mhz增加至160Mhz,更定义了MU-MIMO技术,支持下行多用户并行传输。
全栈程序员站长
2022/09/08
3.1K0
WLAN基本知识之802.11标准「建议收藏」
推荐阅读
相关推荐
WLAN Mesh技术介绍,精华!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验