码迷,mamicode.com
首页 > 其他好文 > 详细

const和let和var

时间:2019-05-25 17:05:43      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:log   sig   变量   外部   它的   tmp   zone   场景   不可   

ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。

ES6中增加了块级作用域的概念,

let 命令
1. let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

{
let a =10;
var b= 8;
}

console.log(a);//ReferenceError: a is not defined(let声明的变量只在当前代码块内有效)
console.log(b);//1
2. 不存在变量提升

 对比:

var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined

// var 的情况
console.log(a); // 输出undefined
var a = 2;

// let 的情况
console.log(b); // 报错ReferenceError
let b = 2;
3. 不允许重复声明

let不允许在相同作用域内,重复声明同一个变量。

4. 暂时性死区

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

var tmp = 888;

if (true) {
tmp = ‘abc‘; // ReferenceError
let tmp;
}
说明:
由于存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,同一个作用域内,不能重复声明同一个变量,所以在let声明前,对tmp进行赋值则报错
const
1. const声明一个只读的常量。一旦声明,常量的值就不能改变。

const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.
说明:
const一旦初始化赋值,就不能改变
2. const一旦声明变量,就必须立即初始化,不能留到以后赋值。对于const来说,只声明不赋值,就会报错

const a;// SyntaxError: Missing initializer in const declaration
说明:const一旦声明,必须赋值
3. const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。

if (true) {
console.log(b); // ReferenceError
const b = 5;
}
4. const的作用域与let命令相同:只在声明所在的块级作用域内有效。

if (true) {
const b= 2;
}
console.log(b);//报错
var:变量提升(无论声明在何处,都会被提至其所在作用于的顶部)
let:无变量提升(未到let声明时,是无法访问该变量的)
const:无变量提升,声明一个基本类型的时候为常量,不可修改;声明对象可以修改
---------------------
作者:Katherine_Lisa
来源:CSDN
原文:https://blog.csdn.net/qq_36671474/article/details/81986198
版权声明:本文为博主原创文章,转载请附上博文链接!

const和let和var

标签:log   sig   变量   外部   它的   tmp   zone   场景   不可   

原文地址:https://www.cnblogs.com/distantdream1992/p/10922888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!