From 9cdf068e4a1af32ef75a47c4b7e42b96f2d38315 Mon Sep 17 00:00:00 2001 From: dp~ <457509824@qq.com> Date: Mon, 23 Oct 2017 15:18:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E6=97=B6=E6=80=A7=E6=AD=BB=E5=8C=BA?= =?UTF-8?q?=20&&=20=E7=AE=AD=E5=A4=B4=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- var-let-const.md => 1.var-let-const.md | 20 ++++++- 2.arrow-function.md | 72 ++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 1 deletion(-) rename var-let-const.md => 1.var-let-const.md (58%) create mode 100644 2.arrow-function.md diff --git a/var-let-const.md b/1.var-let-const.md similarity index 58% rename from var-let-const.md rename to 1.var-let-const.md index cb1a630..80adaae 100644 --- a/var-let-const.md +++ b/1.var-let-const.md @@ -48,4 +48,22 @@ for (var i = 1; i < 10; i++) { }, 1000); } ``` -这里把 `var` 可以换成 `let`,`const`试试。 \ No newline at end of file +这里把 `var` 可以换成 `let`,`const`试试。 + +# ES6暂时性死区 + +``` +console.log(color); +var color = 'yellow'; +``` + +* 以上,`var` 的情况会变量提升,会报 `undefined`; +* 如果换成 `let` 、`const` ,会报 `ReferenceError: color is not defined`; + +> 在 ECMAScript 2015 中,let 绑定不受变量提升的约束,这意味着 let 声明不会被提升到当前执行上下文的顶部。在块中的变量初始化之前,引用它将会导致 ReferenceError(而使用 var 声明变量则恰恰相反,该变量的值是 undefined )。这个变量处于从块开始到 let 初始化处理的”暂存死区“之中。 [参考](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/let), + +# 如果选择声明变量的方式 + +* 默认使用 `const` +* 会重新更新变量使用 `let` +* 不应该在ES6中使用 `var` \ No newline at end of file diff --git a/2.arrow-function.md b/2.arrow-function.md new file mode 100644 index 0000000..785183a --- /dev/null +++ b/2.arrow-function.md @@ -0,0 +1,72 @@ +# 箭头函数 + +### 写法灵活 +``` +const numbers = [2, 4, 7, 89, 234]; + +const double = numbers.map(function (number) { + return number * 2; +}); + +const double2 = numbers.map((number) => { + return number * 2; +}); + +console.log(double2); +``` + +以上,两种语法, `double` 与 `double2` 结果一样。 + +简而言之: +* 删掉 `function` 关键字 +* 加上一个 `=>` 箭头 +* 没有参数加 `()` +* 一个参数可选择加 `()` +* 多个参数 `,` 分隔 + +### 隐式返回 +> 显示返回就是 `return` 关键字加上后面返回的内容 + +箭头函数中的隐士返回就是可以把 `renturn` 省略掉,去掉花括号 `{}`。 + +``` +const double2 = numbers.map(number => number * 2); +``` + +# this + +``` +const Dp = { + name: 'Dp', + hobbies: ['Coding', 'Sleeping', 'Reading'], + printHobbies: function () { + this.hobbies.map(function (hobby) { + console.log(`${this.name} loves ${hobby}`); + }); + } +} +Dp.printHobbies(); +``` + +以上,结果是 +``` +undefined loves Coding +undefined loves Sleeping +undefined loves Reading +``` + +原因 `this` 是在运行的时候绑定的,在以上 `map` 方法中的回调函数是一个独立的函数,当一个函数独立运行的时候,不是被作为对象的方法调用,也没有通过当没有 `apply` , `bind` , `call` 改变 `this` 值的话,这时候的 `this 指向 `window`。 + +所以我们可以改写 +``` +var self = this; +this.hobbies.map(function (hobby) { + console.log(`${self.name} loves ${hobby}`); +}); +``` +达到想要的效果。 + +我们还可以利用箭头函数的便利 +``` +this.hobbies.map(hobby => console.log(`${this.name} loves ${hobby}`)); +``` \ No newline at end of file