let 和 var 的区别
2024-09-08 18:05:16
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 新出的let
和const
关键字声明在这些语句中就能形成块级作用域。所以,我推荐使用let
来声明变量,而不是var
。
function fun() {
for (let i = 10; i > 0; i--) {}
console.log(i); // => Uncaught ReferenceError: i is not defined
}
最新文章
- Hibernate自动建表问题
- Git 常见问题整理
- 【翻译】hololens入门
- 关于Oracle过程,函数的经典例子及解析
- shell脚本中变量$$、$0等的含义
- oracle group by中cube和rollup字句的使用方法及区别
- windows7修改双系统启动项名称、先后顺序、等待时间
- 解决方法:java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
- OD: Universal Shellcode
- JPG 图片在IE下不能显示的问题
- Java虚拟机(JVM)
- ArrayList源码解析(四)
- 读书笔记-你不知道的JS上-声明提升
- 结构化您的Python工程
- 转载:Maplab开源VI-SLAM框架介绍
- Kattis之旅——Prime Reduction
- 717. 1-bit and 2-bit Characters
- 使用GUI工具高效构建你自己的Nuget包
- oracle 存储过程 建表插值等
- Django创建一个简单的blog