ES6之探索与比较var、let、const关键字

var、let、const三个关键字作用基本相同都是为了声明变量,但也存在区别,无论用法还是作用域都有差异。

- var 关键字
var关键字是在es6之前就推出的,用于声明变量。它的作用域为全局,也就是不区分代码块:

var Array = [];
var i;
for (i = 0; i < 3; i++) {
  numArray.push(i);
}
console.log(i);  // returns 3

上面变量i通过var全局声明,所以在其他代码块函数中进行i++计算会直接改变i的值。但每一个变量都全局声明难免会出错,而且当变量重复声明被覆盖的时候不会提示错误:

var name = 'Job';
var name = 'David';
console.log(name);     // 打印出 'David'

在小型开发中可能没多大影响,但大型项目中将导致后续debug十分困难。这时,es6推出let新关键字。

- let 关键字
let也用于声明变量,但不同于var的是它的作用域是局部,也就是止步于变量所存在的代码块或语句中:

let print;
for (let i = 0; i < 3; i++) {
  if (i === 2) {
    print = function() {
      return i;
    };
  }
}
console.log(printNumTwo());  // 返回 2
console.log(i); // 返回 "undefined",因为i只作用于for代码块

并且它解决了上述所说的变量重复声明被覆盖的问题,会提示报错:

let name = 'Job';
let name = 'David';  // 报错,重复覆盖

拥有了varlet似乎已经能够满足日常开发需求避免很多出错了,暖心es6还推出了const关键字。

- const关键字
在我理解,const可看做let的新版本,它拥有let的特性与优点,但区别之处在于它声明的是“只读变量”,在声明后无法再次赋值等操作此变量:

const noChange = "hello";
noChange = "hi";   // 报错,变量只读无法更改

但是在声明对象、函数、数组时,它们是可以被改变的。const只保护了这些变量的标识无法更改,但变量内部元素是可以单一更改的:

const s = ["a", "b", "c"];
s = [1, 2, 3];  // 报错,s变量无法重新赋值
s[2] = "e"; // 内部元素单一更改可以成功
console.log(s);  // 返回 ["a", "b", "e"]

在开发中合理运用varletconst关键字声明变量可以避开很多bug。
也请习惯多使用"use strict",它代表开启了严格模式,用于检测常见的代码错误和不安全行为,这对自己的书写规范也大有好处。例如:

    "use strict";
    x = 666; // 没有用关键字声明x,使用会报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值