深入浅出ES6之let和const命令

作者:mrr 时间:2024-05-22 10:37:21 

let和const声明的变量只在代码块内有效


{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1

不存在变量提升

变量一定要在声明后使用,否则报错


var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}

不允许重复声明


// 报错
function () {
let a = 10;
var a = 1;
}

块级作用域


function f() { console.log('I am outside!'); }
(function () {
if(false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();
}());
//I am inside! ES5 函数提升
//I am outside! ES6 块级作用域

const命令

声明一个只读的常量,一旦声明,常量的值就不能改变

一旦声明变量,就必须立即初始化,不能留到以后赋值

let命令、const命令、class命令声明的全局变量,不属于全局对象的属性


var a = 1;
// 如果在Node的REPL环境,可以写成global.a
// 或者采用通用方法,写成this.a
window.a // 1
let b = 1;
window.b // undefined

下面再单独给大家介绍ES6之const命令

一直以来以ecma为核心的js始终没有常量的概念,es6则弥补了这一个缺陷;


const foo='foo';
foo='bar';//TypeError: Assignment to constant variable.

上例声明了一个基本类型的常量,如过试图修改初始值则会报错;如果是引用类型的值同样适用,但是有一点需要注意,举例说明:


const foo=[];
foo=[1];//Assignment to constant variable.

正常报错,没毛病,再看:


const foo=[1,2,3];
foo[1]=4;
console.log(foo)//[1, 4, 3]

这怎么没报错?而且还能修改成功? 这两个例子不一样的地方在于前者是修改了指针(需熟悉js 引用类型)对应的内容改变了,后者则不是指向依然没变 但是指向对象的内容发生改变了,对于foo而言我只是一个指针负责指向对应的对象 至于对象内容是什么就不管我的事了所以可以修改;如果不想让内容也改变也行使用另一个方法;


const foo=Object.freeze([1,2,3]);
foo[1]=4;
console.log(foo)//[1, 2, 3]

这样就不用担心被修改了;

标签:es6,let,const
0
投稿

猜你喜欢

  • 详细分析mysql MDL元数据锁

    2024-01-28 18:29:10
  • TensorFlow人工智能学习创建数据实现示例详解

    2022-04-20 12:58:27
  • 如何用ASP.NET连接MS SQLServer数据库?

    2010-06-11 19:27:00
  • Python从零开始创建区块链

    2021-02-12 12:21:14
  • MySQL身份认证漏洞 升级到5.5.24可修正

    2012-07-11 15:54:09
  • python从入门到实践之字典

    2023-05-11 22:20:17
  • 手把手教你实现Python连接数据库并快速取数的工具

    2024-01-27 12:28:09
  • 如何用 Python 子进程关闭 Excel 自动化中的弹窗

    2023-10-16 15:47:32
  • Python3.7 新特性之dataclass装饰器

    2021-05-11 13:13:40
  • python数据处理 根据颜色对图片进行分类的方法

    2022-02-27 08:41:37
  • 分组后分组合计以及总计SQL语句(稍微整理了一下)

    2024-01-26 23:10:51
  • MySQL创建用户和权限管理的方法

    2024-01-21 12:08:58
  • Golang 利用反射对结构体优雅排序的操作方法

    2024-05-10 13:56:42
  • 详解vue-cli 脚手架 安装

    2024-05-09 10:40:06
  • Python如何使用27行代码绘制星星图

    2024-01-02 10:41:44
  • 详解MySQL中的缓冲池(buffer pool)

    2024-01-26 01:05:53
  • 返回首页的链接地址写法

    2008-10-22 13:38:00
  • JavaScript检测实例属性, 原型属性

    2024-04-18 09:40:54
  • Python 实现Serial 与STM32J进行串口通讯

    2021-03-05 16:01:33
  • python语言中有算法吗

    2022-06-22 12:42:15
  • asp之家 网络编程 m.aspxhome.com