在JavaScript中,使用var声明的变量具有函数作用域,而不是块级作用域。这意味着在一个函数内部,使用var声明的变量在整个函数范围内都是可见的,包括嵌套的块(如if语句、for循环等)。为了避免区块对var不起作用的问题,你可以采用以下方法:

  1. 使用letconst代替var:从ECMAScript 2015(ES6)开始,引入了新的声明方式——letconst。它们声明的变量具有块级作用域,因此仅在所属的块内部可见。通过使用letconst,你可以确保变量只在其所属的块中起作用。

    例如:
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' 在这个区块之外不可见
  1. 使用立即执行函数表达式(IIFE):在ES6之前,可以使用立即执行函数表达式来限制变量的作用域。它会创建一个新的函数作用域,使得var声明的变量只在这个新的函数作用域内可见。

    例如:
(function() {
if (true) {
var a = 1; // 使用 'var' 声明的变量 'a' 仅在 IIFE 内部可见
}
})();
console.log(a); // 抛出 ReferenceError,因为 'a' 在 IIFE 之外不可见

总之,如果你使用的是较新版本的JavaScript(ES6及更高版本),推荐使用letconst来避免区块对var不起作用的问题。如果你使用的是老版本的JavaScript,可以考虑使用立即执行函数表达式(IIFE)。

javascript现代编程系列教程之一:区块作用域对VAR不起作用的问题的更多相关文章

  1. 高德地图 JavaScript API 开发系列教程(一)

    高德地图 API 提供包括 Web API 即 JavaScript API,Android API,定位API,IOS API,WP API,Win8 API等,本系列教程主要针对高德 JavaSc ...

  2. 珍藏的C语言编程系列教程

    本文有332个文字,大小约为2KB,预计阅读时间1分钟 这是本人珍藏的C语言.C++系列教程. 相信每个Coder的第一门编程语言就是C语言吧, 现在也依然很热门,不谈了.直接上链接,感兴趣的直接存, ...

  3. 高德地图 JavaScript API 开发系列教程(二)

    上节简单介绍高德地图JavaScript API及网页中基本地图展示.有了地图后我们可以用来做什么?有人说离我最近的超市在哪里,我怎么去?别急,这些功能我们后面都会慢慢实现.今天为大家详细讲解如何在地 ...

  4. js面向对象编程 ---- 系列教程

    原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...

  5. javascript 高级编程系列 - 基本数据类型

    javascript中的基本数据类型包括: Undefined, Null, Boolean, Number, String 5种数据类型 1. Undefined 类型 (只有一个值 undefin ...

  6. javascript 高级编程系列 - 函数

    一.函数创建 1. 函数声明 (出现在全局作用域,或局部作用域) function add (a, b) { return a + b; } function add(a, b) { return a ...

  7. .Net 与 Javascript 混合编程系列

    之前的文章有提到 edge 和 nodejs 交互,通过node的模块为C# 提供一些扩展,这个还是比較方便. 这里说下为什么要使用js. 1.SharpKit是一个用于在编译时将C#语言转换为Jav ...

  8. Linux 网络编程系列教程

    一.基础理论篇 01.网络协议入门 02.LAN.WAN.WLAN.VLAN 和 VPN 的区别 03.IP 地址介绍 04.广播地址介绍 05.无连接和面向连接协议的区别 06.因特网的IP协议是不 ...

  9. Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述

    CommonJS Module 规范 CommonJS 的模块化规范描述在Modules/1.1.1 中 目前实现此规格的包有: Yabble,CouchDB,Narwhal (0.2), Wakan ...

  10. Windows网络编程系列教程之四:Select模型

    讲一下套接字模式和套接字I/O模型的区别.先说明一下,只针对Winsock,如果你要骨头里挑鸡蛋把UNIX下的套接字概念来往这里套,那就不关我的事. 套接字模式:阻塞套接字和非阻塞套接字.或者叫同步套 ...

随机推荐

  1. JS-1基本语法

    初识JavaScript JavaScript是一种运行在客户端的脚本语言 脚本语言:不需要编译,运行过程中由js解释器(js引擎)逐行来进行解释并执行 现在也可以基于Node.js技术进行服务器编程 ...

  2. 从零开始写 Docker(五)---基于 overlayfs 实现写操作隔离

    本文为从零开始写 Docker 系列第五篇,在 pivotRoot 基础上通过 overlayfs 实现写操作隔离,达到容器中写操作和宿主机互不影响. 完整代码见:https://github.com ...

  3. 基于ads1299神经信号采集之调试总结和备忘

    前记  ads129x系列芯片在生理信号采集这块应用十分广泛,也是一个不可或缺的芯片.最近几个项目用到它,算是从一个陌生到熟悉的过程吧,这个过程踩过不少坑,中间经历过很多比较大的问题困扰和折磨,花费了 ...

  4. 音频wav文件转sbc工具wav2sbc下载

    前记: 书到用时方恨少,工具用时方才发现好不到.为了一个工具,也是折腾了有一阵了. 工具说明: 在耳机中,各大芯片公司为了节省内存,本地播放的一般都是sbc格式文件,这就用到了wav转sbc文件的软件 ...

  5. dbvisualizer不能执行pl/sql块

    如果是如下语句: begin          dbms_output.put_line('Hello World!'); end; 控制台会报错 解决方案:语句改写为如下 --/ begin    ...

  6. 文件的特殊权限:SUID,SGID,SBIT

    文件的特殊权限:SUID,SGID,SBIT Set UID SUID权限只用于二进制文件 运行者必须有X权限 运行者在程序运行过程(run-time)中具有二进制文件拥有者(owner)的权限 例子 ...

  7. ModuleNotFoundError: No module named xxx 的原因和解决办法(附带新大陆)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  8. 使用systemd部署r-nacos

    1. 前言 r-nacos是一个用rust实现的nacos服务.相较于java nacos来说,是一个提供相同功能,启动更快.占用系统资源更小(初始内存小于10M).性能更高.运行更稳定的服务. r- ...

  9. Java实现两种队列(数组和链表)

    package algorithm; /** @author Administrator @date 2022-09-13 17:50 */ public class QueueLinked{ pri ...

  10. JavaScript二代公民身份证号验证

    身份证号码中的校验码是身份证号码的最后一位,是根据[中华人民共和国国家标准GB 11643-1999]中有关公民身份号码的规定, 根据精密的计算公式计算出来的,公民身份号码是特征组合码,由十七位数字本 ...