javascript现代编程系列教程之一:区块作用域对VAR不起作用的问题
在JavaScript中,使用var
声明的变量具有函数作用域,而不是块级作用域。这意味着在一个函数内部,使用var
声明的变量在整个函数范围内都是可见的,包括嵌套的块(如if
语句、for
循环等)。为了避免区块对var
不起作用的问题,你可以采用以下方法:
- 使用
let
和const
代替var
:从ECMAScript 2015(ES6)开始,引入了新的声明方式——let
和const
。它们声明的变量具有块级作用域,因此仅在所属的块内部可见。通过使用let
或const
,你可以确保变量只在其所属的块中起作用。
例如:
if (true) {
var a = 1; // 使用 'var' 声明的变量 'a' 在整个函数内部可见
let b = 2; // 使用 'let' 声明的变量 'b' 仅在这个区块内可见
const c = 3; // 使用 'const' 声明的常量 'c' 仅在这个区块内可见
}
console.log(a); // 输出 1
console.log(b); // 抛出 ReferenceError,因为 'b' 在这个区块之外不可见
console.log(c); // 抛出 ReferenceError,因为 'c' 在这个区块之外不可见
- 使用立即执行函数表达式(IIFE):在ES6之前,可以使用立即执行函数表达式来限制变量的作用域。它会创建一个新的函数作用域,使得
var
声明的变量只在这个新的函数作用域内可见。
例如:
(function() {
if (true) {
var a = 1; // 使用 'var' 声明的变量 'a' 仅在 IIFE 内部可见
}
})();
console.log(a); // 抛出 ReferenceError,因为 'a' 在 IIFE 之外不可见
总之,如果你使用的是较新版本的JavaScript(ES6及更高版本),推荐使用let
和const
来避免区块对var
不起作用的问题。如果你使用的是老版本的JavaScript,可以考虑使用立即执行函数表达式(IIFE)。
javascript现代编程系列教程之一:区块作用域对VAR不起作用的问题的更多相关文章
- 高德地图 JavaScript API 开发系列教程(一)
高德地图 API 提供包括 Web API 即 JavaScript API,Android API,定位API,IOS API,WP API,Win8 API等,本系列教程主要针对高德 JavaSc ...
- 珍藏的C语言编程系列教程
本文有332个文字,大小约为2KB,预计阅读时间1分钟 这是本人珍藏的C语言.C++系列教程. 相信每个Coder的第一门编程语言就是C语言吧, 现在也依然很热门,不谈了.直接上链接,感兴趣的直接存, ...
- 高德地图 JavaScript API 开发系列教程(二)
上节简单介绍高德地图JavaScript API及网页中基本地图展示.有了地图后我们可以用来做什么?有人说离我最近的超市在哪里,我怎么去?别急,这些功能我们后面都会慢慢实现.今天为大家详细讲解如何在地 ...
- js面向对象编程 ---- 系列教程
原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...
- javascript 高级编程系列 - 基本数据类型
javascript中的基本数据类型包括: Undefined, Null, Boolean, Number, String 5种数据类型 1. Undefined 类型 (只有一个值 undefin ...
- javascript 高级编程系列 - 函数
一.函数创建 1. 函数声明 (出现在全局作用域,或局部作用域) function add (a, b) { return a + b; } function add(a, b) { return a ...
- .Net 与 Javascript 混合编程系列
之前的文章有提到 edge 和 nodejs 交互,通过node的模块为C# 提供一些扩展,这个还是比較方便. 这里说下为什么要使用js. 1.SharpKit是一个用于在编译时将C#语言转换为Jav ...
- Linux 网络编程系列教程
一.基础理论篇 01.网络协议入门 02.LAN.WAN.WLAN.VLAN 和 VPN 的区别 03.IP 地址介绍 04.广播地址介绍 05.无连接和面向连接协议的区别 06.因特网的IP协议是不 ...
- Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述
CommonJS Module 规范 CommonJS 的模块化规范描述在Modules/1.1.1 中 目前实现此规格的包有: Yabble,CouchDB,Narwhal (0.2), Wakan ...
- Windows网络编程系列教程之四:Select模型
讲一下套接字模式和套接字I/O模型的区别.先说明一下,只针对Winsock,如果你要骨头里挑鸡蛋把UNIX下的套接字概念来往这里套,那就不关我的事. 套接字模式:阻塞套接字和非阻塞套接字.或者叫同步套 ...
随机推荐
- 视觉slam十四讲CH5 ---相机与图像
视觉slam十四讲 ---CH5 相机与图像 视觉slam中,作为主要传感器的相机自然起到着重要的作用,而相机拍摄的图像及其处理也是我们要做的工作之一. 1. 相机模型 单目相机的针孔模型 上图中的模 ...
- 表单验证 validate 两种 一种是callback配合外部变量,当同步用。第2中是 then async await 这种 真正$api也适用
validateFormRealProcessLeft () { let ret = false this.$refs.xxx.validate((valid) => { if (valid) ...
- 计算引擎-Flink
参考:https://mp.weixin.qq.com/s/RUS9w-bGan6fDcF9CVqvFw checkpoint 1.Checkpoint Coordinator 向所有 source ...
- HUAWEI WATCH GT3手表芯片传感器简析
一 这里梳理一下华为手表GT3所使用的芯片 芯片A: BES2500L 恒玄BES2500L智能手表SoC,集存储.音频.连接为一体,集成BT5.2双模蓝牙,可支持BLE数据传输.蓝牙通话和音乐播放功 ...
- UDP、IMCP、ARP协议通过netmap解析的实现。
上一篇文章我们讲了一个异步的线程池大概需要如何去实现,现在的话,我们如何来解析一个UDP的包. 环境的搭配 这个环境的问题困扰了很久,这个netmap已经不再更新了,支持Ubuntu16.04-Ubu ...
- 记录--vue 拉伸指令
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在我们项目开发中,经常会有布局拉伸的需求,接下来 让我们一步步用 vue指令 实现这个需求 动手开发 在线体验 codesandbo ...
- drools中使用全局变量
一.背景 在我们编写drools的规则文件的时候,有些时候需要用到全局变量,那么这个该怎么实现呢?有哪些注意事项呢? 二.前置知识 1.语法结构 2.全局变量的特点 使用global来定义全局变量,它 ...
- Spring Cloud服务之Nacos作为注册中心与配置中心
1.创建maven父工程管理jar包版本 创建maven骨架,删除多余部分文件.只留pom文件,添加依赖 <packaging>pom</packaging> <pare ...
- exist和left join 性能对比
今天遇到一个性能问题,再调优过程中发现耗时最久的计划是exist 部分涉及的三个表. 然后计划用left join 来替换exist,然后查询了很多资料,大部分都说exist和left join 性能 ...
- 误删除系统超级用户(superuser)权限的恢复方式
在使用KingbaseES数据库的时候,系统默认存在一个跟系统初始化用户同名的Superuser(默认是system用户,可更改). 这个Superuser的存在其实对于权限的管控是很有用的,但是如果 ...