JS变量提升Hoisting
ES6(ES2105)
新增了两个重要的关键字:let
和const
。
let
声明的变量只在let
命令所在的代码块内有效。
const
声明一个只读的常量,一旦声明,常量的值就不能改变。
本文主要总结var
和let
的区别
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