简单了解ES6(一)

ES6声明变量的六种方式:let、const(变量为只读常量,一旦声明,不能修改)、class、import、var、function    ——   其中var、function是ES5声明变量的方式(全局)

简单说明ES6的变量:

1.在所在的区域块内才有效

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

------------------------------------------

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6


2.不存在变量提升

console.log(foo);
var foo = 2; //2

----------------------------------------

console.log(foo);
let foo = 3; //报错


3.暂时性死区

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

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

  tmp = 123;
  console.log(tmp); // 123
}

其中typeof也不是百分之百安全的操作:  typeof x; //报错   let x;  因为x使用let声明,在声明之前都是x的“死区”


4.不允许重复声明变量与参数

function func(arg) {
  let arg;
}
func() // 报错

function func(arg) {
  {
    let arg;
  }
}
func() // 不报错

------------------------------------------

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

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

 了解一下块级作用域与函数声明

ES5规定:函数只能在顶层作用域与函数作用于之中声明,不能再块级作用域声明。

// 情况一
if (true) {
  function f() {}
}

// 情况二
try {
  function f() {}
} catch(e) {
  // ...
}

ES6规定:块级作用域中,函数声明语句作用类似于let,在块级作用于之外不做引用。

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

  f();
}());


理论上会返回“I am inside!”,但是在ES6的浏览器报错。因为环境差异太大,应该避免在块级作用域内声明函数,如果确实需要,可以将函数修改为函数表达式,例如:

// 块级作用域内部的函数声明语句,建议不要使用
{
  let a = 'secret';
  function f() {
    return a;
  }
}

// 块级作用域内部,优先使用函数表达式
{
  let a = 'secret';
  let f = function () {
    return a;
  };
}

 

this对象

全局环境:this => 顶层对象

Node模块和ES6模块:this => 当前模块

任何环境:globalThis => 顶层对象

 

发布了45 篇原创文章 · 获赞 10 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章