var、let、const声明方式的区别

-----  let 和 const的使用规则基本相同,有以下2点区别  -----
1、const声明和赋值必须同时完成
const a   // 报语法错误:常量声明中缺少初始值设定项
------------------------------------------------------------------------
2、const声明的变量不能重新赋值【如果声明来存储基础数据类型,可以称为常量,对象/函数个人理解还是叫变量】
const num = 10
num = 20    // 报语法错误:赋值给常量变量
------------------------------------------------------------------------
3、【扩展】当使用const声明一个不会变的数据时,变量名可以使用全大写,声明对象/函数时常规的变量名就好
const PI = 3.14
const obj = { name: 'lyh', age: 27}
const fn = function fn(){}
 
4、【应用】实际开发中在不需要给变量重新赋值的情况下,建议优先使用const,这样可以避免对象/函数被意外修改
------------------------------------------------------------------------
-----  let/const 和 var的区别  -----
1、重复声明:var可以重复声明一个已经存在的变量;let不允许声明一个已经存在的变量(不论是let、const还是var声明的)
var a = 10
var a = 20
console.log(a) // 20  
let a = 30  // 报语法错误:标识符“a”已声明
------------------------------------------------------------------------
2、变量提升:var声明的变量会提升到当前作用域的顶部,赋值前访问变量得到undefined;let声明的变量不会提升,不允许在声明前访问变量
console.log(a)  // undefined
var a = 10
console.log(a) // 10
console.log(b) // 报语法错误:初始化前无法访问“b”
let b = 20
console.log(b) // 20 要注释上面那一行打印才能正常执行这一句
------------------------------------------------------------------------
3、作用域:var声明的变量只会有全局作用域和函数作用域,let声明的变量还会有块作用域
-----例1:var声明的变量具有函数作用域
console.log(a)  //  报语法错误:a is not defined
function fn(){
  console.log(a)  // undefiend  由于var声明的变量具有函数作用域,所以a只会提升到函数内部的顶部
  var a = 10
  console.log(a)  // 10
}
fn()
console.log(a)  //  报语法错误:a is not defined
-----例2:var声明的变量没有块级作用域
// var声明的变量没有块级作用域,在块内声明可以在块外访问,变量的声明会提升到全局作用域顶部
console.log(b)  // undefined  
{
  console.log(b)  // undefined
  var b = 20
  console.log(b)  // 20
}
console.log(b)  // 20
-----例3:let声明的变量会产生块级作用域
{
  let c = 30
  console.log(c)  // 30
}
console.log(c)  // 报语法错误:c is not defined
------------------------------------------------------------------------
4、【拓展】通过debugger可以看到var声明的变量存在执行栈的Global中(全局对象GO Global Object/在浏览器中也叫window对象)let声明的变量存在Script中(全局变量对象)
debugger
var a = 10
let b = 20
console.log(window.a)   // 10  全局作用域下,var声明的变量默认变成window的一个属性
console.log(window.b)   // undefined  let声明的变量不会绑定到window上

 

posted @ 2023-05-19 01:19  小小个程序员  阅读(46)  评论(0编辑  收藏  举报