ES6之let和var的区别

JS变量提升Hoisting

ES6(ES2105)新增了两个重要的关键字:letconst

let声明的变量只在let命令所在的代码块内有效。

const声明一个只读的常量,一旦声明,常量的值就不能改变。

本文主要总结varlet的区别

var命令

var声明的变量会存在变量提升

(1)声明赋值语句在打印语句后面

console.log(bar); // undefined
var bar = 200;

//上面代码执行时相当于
var bar;
console.log(bar);
bar = 200;
复制代码

(2)声明变量bar1并赋值为200,所以打印出来为200

var bar1 = 200;
console.log(bar1); // 200
复制代码

(3)未使用var声明的变量不会放在VO对象中,只是给全局添加了一个属性。所以在VO查找不到bar3,抛出异常。而用this可以找到

console.log(bar3); // ReferenceError: bar3 is not defined
console.log(this.bar3); // undefined
bar3 = 100;
复制代码

(4)函数声明优先级高于变量声明

function foo(){
    console.log(f1); // [Function f1]
    console.log(f2); // undefined

    var f1 = 'hoisting';
    var f2 = function(){};
    function f1(){}
}
foo();
复制代码

let命令

let声明的变量不存在变量提升

(1)声明赋值语句在打印语句后面

console.log(bar2); // ReferenceError: bar2 is not defined
let bar2 = 200;
复制代码

(2)let不能重复声明

var a = 10;
var a = 20;
console.log(a); // 20

let b = 100;
let b = 200;
console.log(b); // SyntaxError: Identifier 'b' has already been declared
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享