let-var

摘要:let和const是ES6的标准var 是旧的标准

说明:

都是用来声明变量。


示例:

不同的是 var 是都有效,但是let所声明的变量,只在let命令所在的代码块内有效。

具体可以表现在for中最适合

for (let i = 0; i < 5; i++) {}
console.log(i);
//报错
for (var i = 0; i < 5; i++) {}
console.log(i);
//输出5

上面代码中,变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是5。

下面的代码如果使用var,最后输出的是10。

var a = [];for (var i = 0; i < 10; i++) {
  a[i] = function () {    console.log(i);
  };
}
a[6](); // 10

上面代码中,变量i是var声明的,在全局范围内都有效。所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值。

如果使用let,声明的变量仅在块级作用域内有效,最后输出的是6。

var a = [];for (let i = 0; i < 10; i++) {
  a[i] = function () {    console.log(i);
  };
}
a[6](); // 6

上面代码中,变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。

不存在变量提升

let不像var那样会发生“变量提升”现象。所以,变量一定要在声明后使用,否则报错。

console.log(foo); // 输出undefinedconsole.log(bar); // 报错ReferenceErrorvar foo = 2;let bar = 2;

上面代码中,变量foo用var命令声明,会发生变量提升,即脚本开始运行时,变量foo已经存在了,但是没有值,所以会输出undefined。变量bar用let命令声明,不会发生变量提升。这表示在声明它之前,变量bar是不存在的,这时如果用到它,就会抛出一个错误。



相关内容

发表评论

验证码:
点击我更换图片

最新评论