ES6 学习笔记-1

1、let 和 const 命令

ES6 规定暂时性死区, letconst语句不出现变量提升,
主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。
let不允许在相同作用域内,重复声明同一个变量。
let实际上为 JavaScript 新增了块级作用域。


块级作用域
ES5 只有全局作用域和函数作用域,没有块级作用域,带来的问题:
1.内层变量可能会覆盖外层变量
2.用来计数的循环变量泄露为全局变量

ES6 允许块级作用域的任意嵌套。块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。
ES6 的块级作用域允许声明函数的规则,只在使用大括号的情况下成立,如果没有使用大括号,就会报错。


const 命令
const声明一个只读的常量。一旦声明,就必须立即初始化,常量的值就不能改变,不能留到以后赋值。
const的作用域与let命令相同:只在声明所在的块级作用域内有效。

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。


ES6的6种声明方法
ES5 只有两种声明变量的方法:var命令和function命令
ES6 添加 : letconst命令; import命令和class命令


顶层对象的属性
顶层对象的属性与全局变量挂钩,被认为是 JavaScript 语言最大的设计败笔之一。
顶层对象:
在浏览器环境指的是window对象,但 Node和 Web Worker没有window
浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self
在 Node 指的是global对象。但其他环境都不支持
ES5 之中,顶层对象的属性与全局变量是等价的。

从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。(let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性)
eg:

let b = 1;
window.b    // undefined

2、函数的扩展

ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。

从 ES5 开始,函数内部可以设定为严格模式。
ES2016 做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。


rest 参数
ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。
rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。


name属性
函数的name属性,返回该函数的函数名。
如果将一个匿名函数赋值给一个变量,ES5 的name属性,会返回空字符串,而 ES6 的name属性会返回实际的函数名。

var f = function () {};

// ES5
f.name // ""

// ES6
f.name // "f"

Function构造函数返回的函数实例,name属性的值为anonymous
bind返回的函数,name属性值会加上bound前缀。


箭头函数
ES6 允许使用“箭头”(=>)定义函数。

var f = v => v;

// 等同于
var f = function (v) {
  return v;
};

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

var f = () => 5;
// 等同于
var f = function () { return 5 };

var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
  return num1 + num2;
};

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回

var sum = (num1, num2) => { return num1 + num2; }

由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。

箭头函数的一个用处是简化回调函数。

箭头函数有几个使用注意点:

(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。

(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

猜你喜欢

转载自blog.csdn.net/lm1022/article/details/80222550
今日推荐