读《ECMAScript 6 入门 —— 阮一峰》(上)

前言

这里写图片描述

ES6的出现是为了提高 javascript 的严谨性,安全性等方面,它代表着js的发展方向。网站开发的人员,无论前后端都必须熟稔 ES6 语法规范。


带着问题看书

1. ES6 新增的关键词 let 和 var 区别?

a.  使用let声明的变量,只在它所在的代码块内有效。即如果使用let,声明的变量仅在块级作用域内有效。
b.  var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。而用let命令声明,不会发生变量提升。
c.  let不允许在相同作用域内,重复声明同一个变量。let实际上为 JavaScript 新增了块级作用域。

2.为什么需要块级作用域?

为了更好的管理变量。
避免 内层变量可能会覆盖外层变量。
避免 用来计数的循环变量泄露为全局变量。

3.利用ES6中的块级作用域改写下面广泛使用的立即执行函数表达式(IIFE)?

// IIFE 写法
(function () {
  var tmp = ...;
  ...
}());
// 块级作用域写法
{
  let tmp = ...;
  ...
}

4.const命令的用法?

const声明一个只读的常量。一旦声明,常量的值就不能改变。

5.ES6 声明变量的六种方法?

var
function
let
const
import
class
为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从ES6开始,全局变量将逐步与顶层对象的属性脱钩。
var a = 1;
// 如果在Node的REPL环境,可以写成global.a
// 或者采用通用方法,写成this.a
window.a // 1

let b = 1;
window.b // undefined

6.什么是“解构”?哪些数据类型可以使用解构赋值?

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
数组,对象,字符串,类数组对象都可以解构赋值,另外数值和布尔值也可以结构赋值。
let [a, b, c] = [1, 2, 3];
let { foo, bar } = { foo: "aaa", bar: "bbb" };
const [a, b, c, d, e] = 'hello';
let {length : len} = 'hello';
let [a, b, c] = [1, 2, 3];

函数的参数也可以使用解构赋值。
例如:
function add([x, y]){
  return x + y;
}

add([1, 2]); // 3

7.rest参数和arguments的区别?

rest是数组,而argument是类数组对象。
ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。

// arguments变量的写法
function sortNumbers() {
  return Array.prototype.slice.call(arguments).sort();
}

// rest参数的写法
const sortNumbers = (...numbers) => numbers.sort();

8.使用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;
};

9.使用箭头函数有哪些注意点?

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

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

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

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

(5)由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。

长期以来,JavaScript 语言的this对象一直是一个令人头痛的问题,在对象方法中使用this,必须非常小心。箭头函数”绑定”this,很大程度上解决了这个困扰。

10.Promise对象的含义和用法?

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

其实,上面罗列的这些只是这本书的冰山一角,大概也就十分之一吧。

了解更多

ECMAScript 6 入门

猜你喜欢

转载自blog.csdn.net/qq_39198420/article/details/78016225