JavaScript 变量声明

警告
本文最后更新于 2023-10-22,文中内容可能已过时。

JavaScript 变量声明

Var、Let 和 Const 有什么区别?

ES6 的特性之一是添加了 let 和 const,我们在开发中,应该尽量使用 let,而不是 var,现在基本主流浏览器都开始支持 ES6,因此不用担心兼容问题

一个很经典的例子

当 for 循环中的 i 通过 var 声明的时候

1
2
3
4
5
6
7
8
9
var arr = [];
//当 i 的值为 2 时,不满足条件,才会跳出循环,输出 2
for (var i = 0; i < 2; i++) {
    arr[i] = function () {
        console.log(i);
    }
}
arr[0]();
arr[1]();

输出

1
2

当 for 循环中的 i 通过 let 声明的时候

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 其实主要区别还是 i 的类型,arr 是通过 var 声明的还是通过 let 声明的,差别不大
let arr = [];
for (let i = 0; i < 2; i++) {
    arr[i] = function () {
        console.log(i);
    }
}
// 循环结束后产生了两个块级作用域,且产生的两个 i 处于不同的块级作用域中,互不影响
arr[0]();
arr[1]();

输出

1
2
0
1

var 声明的作用域是全局的或函数/局部的。var 会无视块级作用域

for 的每次循环都会产生一个块级作用域,如果 i 为 var 声明,则 i 其实可以视为一个全局变量(因为 i 不在函数内),每一个块级作用域使用的都是同一个 i,如果 i 为 let 声明,则每一个块级作用域中的变量都是不同的,函数执行时输出的是自己上一级(循环产生的块级作用域)作用域下的 i 值,因此 arr[i] 的输出结果会不同。

 

0%