JavaScript中var、let和const的区别
JavaScript中var、let和const的区别
var声明
无论变量在何处被声明,使用关键字var声明的变量,都会被当作在当前作用域顶部声明的,这个现象被称作变量提升。
function getValue(){ if(condition){ var value = 'something'; return value; }else{ return null } }
等价于
function getValue(){ var value; if(condition){ value = 'something'; return value; }else{ return null } }
在循环中,使用var关键字也很容易造成误会
for(var i = 0;i < 10;i++){ console.log(i); }
最终会返回10次10而不是预想中的0到9,并且在循环外也能访问变量i。
在同一作用域下不能重复声明变量,但可以在嵌套的代码块中声明。
在全局作用域中使用var关键字时,会覆盖window对象中的属性;
let声明
使用let声明时,可以把变量的作用域限制在当前代码块中,形成块级作用域,并且没有变量提升的现象。
for(let i = 0 ; i < 10; i++){ console.log(i); }
使用let在循环中可以分别打印0到9
const声明
const声明和let都是块级标识符,执行到代码块外会被销毁;
const声明的常量一旦设定便不能修改,并且必须要进行赋值初始化;
当用const声明对象时,可以修改对象的值,但不能修改变量与对象的绑定。
const person = { name:'jack' }; person.name = 'rose'; //抛出语法错误 person = { name:'greg' };
在全局作用域中使用let,const关键字时,不会覆盖window对象中的属性;