欢迎光临散文网 会员登陆 & 注册

深入浅出 ES6 之 let 和 const 命令

2023-07-08 10:45 作者:wx19970108018  | 我要投稿

深入浅出 ES6 之 let 和 const 命令

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 命令的评论 (共 条)

分享到微博请遵守国家法律