var 关键字

在块级作用域中使用var声明变量,外面同级的块级作用域也可以访问。if、switch、for 等语句的作用域都没有块级作用域,所以说,在这些语句中声明的变量都能被外界访问,这是非常不安全的。

function f() {
if (true) { var x = 10; }
console.log(x); // => 10
}

在 if 语句中通过var定义的变量,能够被外界访问。然而,在 Java 中是不允许的:

而 JavaScript 只有函数才能创建一个块级作用域,也可以用IIFE函数来创建一个块级作用域。

function f() {
(function () { if (true) { var x = 10; } })();
console.log(x); // => Uncaught ReferenceError: x is not defined
}

IIFE函数创建块级作用域,if 语句在里面声明变量,在第 3 行中使用变量 x,报错了。

let 关键字

控制语句、条件语句的作用域不是块级作用域,所以var声明的变量可以穿透,导致变量冲突容易发生。ES6 新出的letconst关键字声明在这些语句中就能形成块级作用域。所以,我推荐使用let来声明变量,而不是var

function fun() {
for (let i = 10; i > 0; i--) {}
console.log(i); // => Uncaught ReferenceError: i is not defined
}

最新文章

  1. Hibernate自动建表问题
  2. Git 常见问题整理
  3. 【翻译】hololens入门
  4. 关于Oracle过程,函数的经典例子及解析
  5. shell脚本中变量$$、$0等的含义
  6. oracle group by中cube和rollup字句的使用方法及区别
  7. windows7修改双系统启动项名称、先后顺序、等待时间
  8. 解决方法:java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
  9. OD: Universal Shellcode
  10. JPG 图片在IE下不能显示的问题
  11. Java虚拟机(JVM)
  12. ArrayList源码解析(四)
  13. 读书笔记-你不知道的JS上-声明提升
  14. 结构化您的Python工程
  15. 转载:Maplab开源VI-SLAM框架介绍
  16. Kattis之旅——Prime Reduction
  17. 717. 1-bit and 2-bit Characters
  18. 使用GUI工具高效构建你自己的Nuget包
  19. oracle 存储过程 建表插值等
  20. Django创建一个简单的blog

热门文章

  1. 【每日一题】【map存值】2022年2月25日-NC112 进制转换
  2. 直接快速下载NLTK数据
  3. Python全栈工程师之从网页搭建入门到Flask全栈项目实战(5) - Flask中的ORM使用
  4. JAVA中的注解可以继承吗?
  5. rate-limit 一款 java 开源渐进式分布式限流框架使用介绍
  6. 搭建漏洞环境及实战——搭建XSS测试平台
  7. Python简单api实现
  8. python之路40 前端之 CSS 标签查询
  9. Quorum NWR
  10. 解析url地址hashhref