美文网首页
let、const和var的区别

let、const和var的区别

作者: meow_possion | 来源:发表于2019-07-09 14:28 被阅读0次

es6新增的变量声明方式let、const和之前的var都可以用来声明变量。那么这三者的区别是什么呢?

let

  1. let的作用域是块级作用域,es6之前的作用域只有全局作用域、函数作用域,没有块级作用域
  2. let声明的变量不会有声明提升,所以在let 声明的变量之前访问改变量会造成报错,也就是暂时性死区
console.log(b); //ReferenceError: b is not defined
let b = '1';
  1. 不能重复定义
let a = 1;
let a = 2;//Identifier 'a' has already been declared
  1. 存在暂时性死区
var a = 1;
if(1){
  console.log(a);//报错
  let a = 2;
}

①在一个块级作用域中,变量唯一存在,一旦在一个块级作用域中用let声明了一个变量,那么这个变量就属于这个块级作用域所有,不受外部变量的影响
②无论在块中的任何地方声明变量,在块中使用这个名字的变量都是这个变量,无论外部是否有其他同名变量。
③暂时性死区的本质就是,只要进入到当前作用域,那么在变量声明之前,该变量都是不可用的,只有声明变量之后才能使用
④暂时性死区的意义:规范代码,让我们把声明变量的工作放在作用域的前面,这样代码一目了然

const

const用来声明一个常量,且声明的常量是不允许修改的,只读属性。所以在声明的时候必须赋值,否则会报错。
const和let一样存在暂时性死区,没有变量提升,也不允许重复声明。
const定义之后再重复赋值也会报错。

const a = 1;
a = 2;//报错

假如const定义的变量是一个对象,那么可以给这个对象的变量赋值、增加属性、删除属性等操作都是可以的。
因为const是限制了定义的变量不再重新分配地址,也就是地址不变,但是指向的地址上存储的内容是可变的。
const定义了一个无法重新分配内存的变量。const仅仅阻止重新分配,而不是不可变的。
这一点跟Obejct.freeze()有很大的区别。
Object.freeze(obj)返回一个不可变的对象,这意味着不能删除、修改、添加对象的属性
但是Object.freeze很肤浅,假如参数对象的属性也是对象,那么Object.freeze对这个对象的对象属性就不起作用了,需要对obj进行递归遍历并用Object.freeze处理。

var

①var的作用域是函数作用域,在函数内利用var声明一个变量,则在函数内这个变量有效。
②变量声明提升

function(){
  console.log(a);//undefined
  var a = 1;
  console.log(a);//1
}
console.log(a);//报错

相关文章

  • es6

    1、let 和const(定义变量) (1)var 、let 、const的区别 a、作用域区别var 变量声明会...

  • 面试题 var let const的区别 箭头函数和普通函数的区

    var let const 有什么区别 var var声明的变量可进行变量提升,let和const不会var可以重...

  • Android菜鸟学习js笔记 一

    一、var,const,let区别? var 变量,const 常量,let块级变量。

  • let和const

    let/const(常用) let和var 区别 let,const用于声明变量,用来替代老语法的var关键字,与...

  • 总结一下前端常见javascript基础面试题:

    1.var ,let 和const的区别: let和const是es6新增的语法, let和var都可以定义变量,...

  • ES6

    定义变量 let const 和 var 的区别 var 会进行预解析let / const 不会进行预解析预解析...

  • (JS)

    ES6 let、const和var的区别 let和const声明变量不存在变量提升 let和const不能重复声明...

  • js 中 var let const 的区别

    很多人认为 var 和 let const 的区别在于,var 会变量提升,而 let const 不会,虽然可以...

  • JS中var、let、const区别

    在javascript中有三种声明变量的方式:var let const。let var const的区别?var...

  • js中const,var,let区别

    在javascript中有三种声明变量的方式:var let const。let var const的区别?var...

网友评论

      本文标题:let、const和var的区别

      本文链接:https://www.haomeiwen.com/subject/hbpahctx.html