“这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战”
变量的命名有多种方式,今天我们就来聊一聊在 JavaScript 中的 六种 命名方式。
var
我想,陪伴着我们最常时间的,应该就是使用 var 的方式,来命名变量了吧。
但是,使用 var 命名变量会有以下问题:
- 污染全局变量,使用 var命名的变量,会被挂载到全局
var demo = 'demo';
console.log(window.demo === demo); // true
复制代码- 会进行提升
console.log(a); // undefined
var a = 123;
console.log(a); // 123
复制代码- 变量的类型,是根据变量值来决定的 (可以覆盖原来的值)
var data = [1, 2, 3];
console.log(data); // [1, 2, 3]
data = 123;
console.log(data); // 123
复制代码- 允许重复声明
var a = 123;
console.log(a); // 123
var a = [1, 2, 3];
console.log(a); // [1, 2, 3];
复制代码由于 var 命名变量的各种问题,所以在 ES6 中新增了两个命名方式 let 和 const,并且引入了 块级作用域 的概念。
let
- 不会污染全局变量
let demo = 'demo';
console.log(window.demo); // undefined
复制代码使用 var 声明的变量是挂载在全局对象 window 上的,但是使用 let 声明的变量是不会挂载到全局对象 window 上的,这样就不会造成全局对象的变量污染了。
- 不会进行变量提升
console.log(demo); // Uncaught ReferenceError: Cannot access 'demo' before initialization
let demo = 123;
复制代码和 var 不一样,当使用 let 声明该变量前使用它,会报错。一定要在这个变量初始化之后,才能访问。
- 不允许重复声明
let demo = 'demo';
let demo = 132;
console.log(demo); // Uncaught SyntaxError: Identifier 'demo' has already been declared
复制代码可以看到在控制台上给我们报了错误,错误信息是为了告诉我们,变量 demo 已经声明了。
const
const 具有 let 的所有特点。就不一 一阐述了。
使用 const 命名的变量,我们通常称它为 常量,为什么呢?
因为使用了 const 命名了变量之后,该变量的值就不能进行更改了。
如果是引用值的话,
const只能确保这个变量指向的地址不会发生改变,不能确保里面的属性的引用值不能进行修改。如下:
- 原始值
const demo = 123;
demo = 234;
console.log(demo); // Uncaught TypeError: Assignment to constant variable.
复制代码会报类型错误,告诉我们不能对常量进行重新赋值。
- 引用值
// 1
const demo = {a: 1};
demo.a = 2;
console.log(demo); //{a:2}
// ======
// 2
const demo = [1];
demo = {a:1};
console.log(demo); // Uncaught TypeError: Assignment to constant variable.
复制代码一旦 const 命名的变量指向地址发生改变之后,就会报错。
注意
- 使用 const命名变量的话,一定要在命名的时候,就进行初始化,否则会报错。
- 在循环中,控制循环的变量不能使用 const,可以使用let:for(const i = 0, i < 9; i ++){ const a = i; console.log(a); }; // 0 第一次输出 // Uncaught TypeError: Assignment to constant variable. 第二次输出,并且不会在进行后续操作 for(let i = 0; i < 9; i ++) { const a = i; console.log(a) } // 0 // 1 // 2 // ... // 8 复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
    























![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
