var、let、const

var的bug

var 没有块儿级作用域
for
(var i=0;i<10;i++){ var a = 'guojing'; } console.log(a); //guojing console.log(i); //10

for (var i = 0; i < 3; i++) {
  setTimeout(function () {     console.log(i)   }, 1000); }
//输出三个3

var 能重复定义变量

必须使用严格模式即'use strict' 后才能使用let声明变量

for(var i=0;i<10;i++){
    var a = 'guojing';
}
console.log(typeof a);    //undefined
console.log(typeof i);    //undefined

for
(var i = 0; i < 3; i++) {   setTimeout(function () {     console.log(i)   }, 1000); } //输出1 2 3

1.let声明的变量拥有块级作用域。

2.let声明的全局变量不是全局对象的属性(见下面例子)。

3.形如for (let x...)的循环在每次迭代时都为x创建新的绑定。

4.用let重定义变量会抛出一个语法错误(SyntaxError)。

5.let不能重复定义变量,不然浏览器会报错。

var a =  'guojing';
let b = 'huangrong';
function aaa(){
    console.log(this.a);
    console.log(this.b);
}
aaa();
输出:guojing    undefined

const 用来定义常量

1.声明时必须赋值

2.不能重复定义

3.不能重新给const变量赋值

4。一般不给const修饰的变量初始化为一个对象,如果初始化为一个对象,const定义的是这个对象的引用,接下来自己理解会发生什么,引用不能变更,但是对象里面的属性都可以变更;

参考:https://www.jianshu.com/p/4e9cd99ecbf5

猜你喜欢

转载自www.cnblogs.com/fengyouqi/p/9570789.html