let、var、const

共同点 

三者都可以用来声明变量。

区别

首先来了解下变量,变量作用范围有全局作用域和方法作用域。

var与let

1.出现版本

ES6之前定义变量只有var;而ES6之后出现了 let,const。

2.作用域

var作用域只有全局和函数({})作用域,函数内声明整个函数都可以使用。

let和const存在块级作用域,类似于java代码块,使用{}包起来的块,例如 iffor的{}{代码块就是块级作用域。作用域仅在于{}这个范围。

3.全局变量和全局对象的属性

var声明的全局变量作为属性被挂到window对象,let和const声明的不会,即不会作为全局对象的属性。

var x = 100;
console.log(window.x) //100
console.log(this.x)  //100
let y = 100;
console.log(window.y)  //undefined
console.log(this.y)   //undefined

4.变量提升

var定义的变量存在变量提升,即在定义变量之前就可以使用,但为undefined。

let定义的变量不存在变量提升,即只能在let声明后,方可使用,否则报ReferenceError。ES6规定从花括号开始到let声明这个变量之前的这个范围,都是不可用的,语法上叫做,“暂时性死区”。

5.重复定义

var定义的变量可以声明多次,而let不可以。

console.log(typeof(x) + "---");
var x  = 100 ;
var x = 6;
console.log(x)
let y = 6;
console.log(y + "---");

const

const作用域与let一致。

const定义的变量必须经过初始化,即赋值,而且一旦初始化就不可再变更。

const X = 100;
X = 10    //Uncaught TypeError: Assignment to constant variable
const y;    //Uncaught SyntaxError: Missing initializer in const declaration

注意:如果是常量对象,则由于保存的是对象地址,因此对象内部属性可以改变。

posted @ 2019-08-01 16:24  haozj  阅读(93)  评论(0编辑  收藏  举报