es6进修之let和const敕令

let和const敕令

let敕令是在它地点的代码块有用,它属于块级作用域,es6新增。es5只要全局作用域和函数作用域。let敕令存在暂时性死区(TDZ),即在说明前运用就会报错,不存在变量提拔

console.log(a); // 报错
let a = 111;

==let不许可在雷同作用域中,反复说明统一变量==

块级作用域和函数声明

es6中明确划定在块级作用域中能够声明函数,在块级作用域中,函数声明语句的行动类似于let,在块级作用域外不可援用。以下是es6中对函数声明做的划定

  • 许可在块级作用域内声明函数。
  • 函数声明类似于var,即会提拔到全局作用域或函数作用域的头部。
  • 同时,函数声明还会提拔到地点的块级作用域的头部。

看下面一段代码

// ES6 环境
function f() { console.log('I am outside!'); }
(function () {
  if (false) {
    function f() { console.log('I am inside!'); }
  }

  f();
}());

// Uncaught TypeError: f is not a function

会报错,应当块级作用域中的函数声明类似于var,会被提拔到块级作用域头部,下面是现实运转代码

//ES6 环境
function f() { console.log('I am outside!'); }
(function () {
    var f = undefined;
  if (false) {
    function f() { console.log('I am inside!'); }
  }

  f();
}());
// Uncaught TypeError: f is not a function

所以要防止在块级作用域中声明函数,假如必需的话运用函数表达式

const敕令

const 声明一个只读的常量,声明后不可转变,须要注重的是const只是保证声明的变量指向的那块内存空间保留的数据不能修改,关于复合型数据(对象和数组),变量指向的内存地址,保留的是一个指向现实数据的指针,const 只能保证这个指针是牢固的,指针指向的数据结构是能够变的,因而对象能够增加属性,数组能够增加数据,然则他们不能赋给另一个变量

const foo = {};

// 为 foo 增加一个属性,能够胜利
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only

es6中有六中声明变量的要领:var 敕令和function 敕令,letconst ,另有import 敕令和class敕令

es5中顶层对象和全局变量是挂钩的,全局声明的变量是顶层对象的属性,es6中let,const,class敕令声明的全局变量不在是全局变量的属性

    原文作者:哈哈哈我只是想笑
    原文地址: https://segmentfault.com/a/1190000018800434
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞