美文网首页
ES6 - let和const

ES6 - let和const

作者: 程序员是粉色的 | 来源:发表于2020-07-24 11:00 被阅读0次

1.var

特点有三:

  • 变量生命提升
  • 可重复定义同一个名字的变量不报错
  • 全局变量挂载到window

let和const的特性:

  • 没有变量生命提升
  • 不能重复声明同一个变量,即使是var过的变量,甚至是行参也不行。
  • 声明的变量不会挂载到window上
  • 有块级作用域的特点
  • 在大括号{}里边会形成临时死区
  • 可解决闭包问题。
  • [const特殊] var和let定义变量,const定义常量
console.log(a) //undefined a 变量提升到前面,相当于 var a
var a=10;

这里曾经出现过一个笑话

console.log(name)//10
var name=10
//这里我毫不犹豫想的肯定是undefined ,其实打印的是10,因为name是JavaScript内置的对象。
//name不是关键字,是window下自有的属性。所以一般不会用name当做变量名使用

let 和 const 声明的变量没有变量提升。

console.log(a);//报错 Cannot access 'a' before initialization
//变量无法提升;
let a = 10;

console.log(b);//报错 Cannot access 'b' before initialization
//变量无法提升;
const b = 10;

var 能重复声明。

var a = 10;
var a = 20;
console.log(a)//20

let 和 const 不能重复声明。

let a = 10;
let a = 20;//报错Uncaught SyntaxError: Identifier 'a' has already been declared

const b = 10;
const b = 20;//报错 'b' has already been declared

var 和 let 声明时可以不用设置初始值。

var a,let b;
a = 10;
b = 20;
console.log(a,b)//10,20

const 声明时必须设置初始值,不能使用 null 占位。

const a;
a = 20;//报错 Missing initializer in const declaration

var 没有块级作用域

for(var i=0;i<3;i++){
  console.log(i);//0,1,2
}
console.log(i);//3,没有块级作用域,外层也能访问

if(true){
  var a = 10;
}
console.log(a);//10

let 和 const 有块级作用域

for(let i=0;i<3;i++){
  console.log(i);//0,1,2
}
console.log(i);//报错 i is not defined,有块级作用域,外层不能访问

if(true){
  let a = 10;
}
console.log(a);//报错 a is not defined

if(true){
  const b = 10;
}
console.log(b);//报错 b is not defined

var 不存在暂时性死区

 var a = 10;
 if(true){
    console.log(a);//10
    var a = 20;
  }

let 和 const 存在暂时性死区

var a = 10;
if(true){
      console.log(a);//报错 Cannot access 'a' before initialization
      let a = 20;
 }
 
var b = 10;
if(true){
      console.log(b);//报错 Cannot access 'b' before initialization
      const b = 20;
 }


常见面试题

function sayHi() {
  console.log(name)
  console.log(age)
  var name = 'Lydia'
  let age = 21
}

sayHi() //undefined 和 ReferenceError
for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}

// 0 1 2 和 3 3 3

相关文章

  • (JS)

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

  • ES6(let 与 const)

    ES6中引入了let 和 const来声明变量,我们来看下let 和 const 的使用 一、let let定义的...

  • es6总结一

    es6基础 let和const命令 let和const用于声明变量let跟var的区别 1、let定义过的变量不能...

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

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

  • ES6之 let 和 const 命令

    ES6 之 let 和 const 命令 1、let 命令 1.1、基本用法 ES6 新增了let命令,用来声明变...

  • TS中 var 和 let 的区别

    let 和 const 是 ES6 中新增的声明对象的类型。与 var 相比,let 和 const 不存在...

  • es6常用语法

    const 和 let 在es6语法规范中,尽量使用let替代var,如果在const 和let中选,优先使用co...

  • es6解读1: let, const 和 smybol

    let const 作用域 作用域概念 如何使用let和const 使用let 形成块级作用域 es6下强制开启...

  • es6解读1: let,const和symbol

    let 和 const 作用域的概念 如何使用let和const 使用let1、形成块级作用域2、es6下强制开启...

  • es6

    [TOC] 参考阮一峰的ECMAScript 6 入门参考深入浅出ES6 let和const let和const都...

网友评论

      本文标题:ES6 - let和const

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