被遗漏的const、let要点

2.1 let 命令

2.1.1 基本用法

let 块级作用域

for (let i = 0; i < 3; i++) {
  let i = "abc";
  console.log(i);
}
// 打印三次abc,说明for循环变量是父作用域,循环体是单独作用域

2.1.2 不存在变量提升

先定义变量后使用

2.1.3 暂时性死区(划重点)

只要块级作用域中存在let命令,所声明的变量就绑定(binding)在区域中,不能受到外部影响

var temp = 123;
if (true) {
  temp = 122; //temp not defined
  let temp;
}

var x = x;
let y = y; //y未定义

2.1.4不允许重复声明

let 不允许在相同作用域重复生命同一个变量

2.2 块级作用域与函数声明

块级作用域允许声明函数的规则只能在大括号中成立

"use strict";
if (true) {
  function f() {}
}

if (true) 
  function f() {} //报错

2.2 const 命令

2.3.1 基本用法

const 声明一个只读的常量,一旦声明,常量值不能改变(!!!真的不能改变么,答案在本质上

const PI = 3.14
console.log(PI)

PI = 3 //TypeError: Assignment to constant variable.

一样是块级作用域,存在暂时性死区,不能重复声明。

2.3.2本质(划重点)

const 实际上保证是不是变量值不得变动而是变量指向的地址不得变动。
对于基本数据类型,值保存在变量指向的内存地址中,因此等同于常量。但是对于引用性数据(以对象和数组为主),变量保存内存地址保存的只是指针,const只能保证指针是固定的,对于指针指向的数据不能保证。

"use strict";
const obj = {};
obj.value = 123;
console.log(obj.value); //123
foo = {}; //将foo指向另一个对象,正常模式下不报错,在严格模式下报错

文章为阮大大《ES6标准入门》整理而来

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • let 和 const 命令 let 命令 块级作用域 const 命令 顶层对象的属性 gl...
    安小明阅读 4,525评论 0 0
  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    卞卞村长L阅读 3,728评论 0 0
  • 本文属个人笔记,不做详解,仅供参考! let命令 基本用法 ES6 新增了let命令,用来声明变量。它的用法类似于...
    R_yan阅读 29,193评论 6 18
  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice阅读 5,529评论 0 2
  • 人生,我想要的人生是什么…很明显,现在的生活并不是我想要的人生,我的高度不在这里,从现在算起,给我五年的时间,我想...
    我的名字叫安琪儿阅读 1,111评论 0 0