var 、let和 const

在ES5之前,js中只有两种类型的作用域:全局作用域和函数作用域。ES6中新增了块级作用域。

全局作用域

全局声明(不在函数内)的变量拥有全局作用域,全局变量可以在js代码的任何位置访问。

 var count = 1;
 function add(){
   console.log(count); 
 }
 add()  // 1

let、var在函数外部声明的变量都是全局作用域。

函数作用域

函数内声明的变量拥有函数作用域,只能在函数内访问。

 var count = 1;
 
 function add(){
   console.log(count);
    var flag = 1;
 }
   
  add();              //1
  console.log(flag); //flag is not defined

块级作用域

在{ }内通过var声明的变量没有块级作用域,用let声明有块级作用域。

   {
     var count = 1;
     let flag = 1;
   }
   console.log(count);//1
   console.log(flag);//flag is not defined

如果let和var在全局函数外或者块外声明都拥有全局变量。

变量的重新声明

用var声明的变量允许在程序的任何位置进行重新声明

   var count = 1
   {
     //此处count为1
     console.log(count);//1
     var count = 2;
   }
   //此处count为2
   console.log(count);//2
   var count = 3
   console.log(count);//3

所以使用var声明的变量重新声明变量时会产生问题。
使用let可以解决这一问题。在相同的作用域中,使用let声明的变量是不允许重新声明的。

   let count = 1;
   let count = 2;//不允许重新声明,因为不在同一作用域内
   {
     let count = 2;//允许重新声明,因为不在同一作用域内
     let count = 3;//不允许重新声明
     //此处count为2
     console.log(count);
   }
   //此处count为1
   console.log(count);//1

总结:
var不管作用域相同不相同,都可以重新声明变量
let只在作用域不相同时才可以重新声明变量

const

const是常量的意思,与let作用域的用法是一致的,但不能重新赋值。

在声明时赋值

   //报错:Missing initializer in const declaration
   const PI;
   PI = 3.1415926;
   //正确
   const PI = 3.1415926;

不可更改常量变量,但常量对象的元素和常量数组的元素是可以改变的,但不可重新赋值。

   const obj = {name:'小白小白不吃白菜',age:18};
   obj.age = 20;
   console.log(obj);//{name: "小白小白不吃白菜", age: 20}
   obj = {name:'小白小白真相大白',age:30}  //报错:Assignment to constant variabl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值