es6 - 一共有 6 种声明变量的方法(var, function, let, const, class, import)

Posted avidya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es6 - 一共有 6 种声明变量的方法(var, function, let, const, class, import)相关的知识,希望对你有一定的参考价值。

  • let声明的变量只在它所在的代码块有效。
  • 不存在变量提升
  • let不允许在相同作用域内,重复声明同一个变量
  • 暂时性死区,只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响, 定义之前不能使用。
  • 应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。

for循环的计数器,就很合适使用let命令。

for (let i = 0; i < 10; i++) {let i = ‘abc‘;}
// 变量ilet声明的,当前的i只在本轮循环有效,每一次循环的i其实都是一个新的变量
// 设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域
//死区:

if (true) {
  // TDZ开始
  tmp = abc; // ReferenceError
  console.log(tmp); // ReferenceError

  let tmp; // TDZ结束
  console.log(tmp); // undefined

  tmp = 123;
  console.log(tmp); // 123
}
  • const声明一个只读的常量。一旦声明,常量的值就不能改变
  • 不存在变量提升
  • let不允许在相同作用域内,重复声明同一个变量
  • const一旦声明变量,就必须立即初始化,不能留到以后赋值
  • 只在声明所在的块级作用域内有效。
  • 存在暂时性死区

const,变量指向的那个内存地址所保存的数据不得改动,

只能保证这个指针是固定的,至于它指向的数据结构是不是可变的。因此,将一个对象声明为常量必须非常小心。

//  冻结对象:不可添删属性
const foo = Object.freeze({});
// 冻结对象,并冻结对象属性
var
constantize = (obj) => { Object.freeze(obj); Object.keys(obj).forEach( (key, i) => { if ( typeof obj[key] === object ) { constantize( obj[key] ); } }); };

以上是关于es6 - 一共有 6 种声明变量的方法(var, function, let, const, class, import)的主要内容,如果未能解决你的问题,请参考以下文章

ES6 基础 一

初步接触ES6

ES6随记

es6语法新特性

TypeScript 变量声明

2-新的变量声明方式(var ,let,const)