From 1ae51bdea5e74474ff2b3b7b84fff57b24dd165e Mon Sep 17 00:00:00 2001 From: ruanyf Date: Sat, 5 Mar 2016 14:35:33 +0800 Subject: [PATCH] =?UTF-8?q?docs(let):=20ES6=E7=9A=84=E5=9D=97=E7=BA=A7?= =?UTF-8?q?=E4=BD=9C=E7=94=A8=E5=9F=9F=E4=BD=BF=E5=BE=97=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E5=9C=A8=E6=9D=A1=E4=BB=B6=E4=BD=9C=E7=94=A8?= =?UTF-8?q?=E5=9F=9F=E5=86=85=E5=A3=B0=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/function.md | 11 +++-------- docs/let.md | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/docs/function.md b/docs/function.md index ff19a6a..a615bb8 100644 --- a/docs/function.md +++ b/docs/function.md @@ -887,13 +887,6 @@ function foo() { } // ES5 -function foo() { - setTimeout(function () { - console.log("id:", this.id); - }.bind(this), 100); -} - -// 或者 function foo() { var _this = this; @@ -903,6 +896,8 @@ function foo() { } ``` +上面代码中,箭头函数转成ES5代码时,内部的`this`需要改为引用外部的`this`。 + 请问下面的代码之中有几个`this`? ```javascript @@ -910,7 +905,7 @@ function foo() { return () => { return () => { return () => { - console.log("id:", this.id); + console.log(`id:`, this.id); }; }; }; diff --git a/docs/let.md b/docs/let.md index 00589bb..21ab338 100644 --- a/docs/let.md +++ b/docs/let.md @@ -310,7 +310,42 @@ let f; f() // "secret" ``` -需要注意的是,如果在严格模式下,函数只能在顶层作用域和函数内声明,其他情况(比如if代码块、循环代码块)的声明都会报错。 +ES5的严格模式规定,函数只能在顶层作用域和函数内声明,其他情况(比如if代码块、循环代码块)的声明都会报错。 + +```javascript +// ES5 +'use strict'; +if (true) { + function f() {} // 报错 +} +``` + +ES6由于引入了块级作用域,这种情况可以理解成函数在块级作用域内声明,因此不报错,但是构成区块的大括号不能少,否则还是会报错。 + +```javascript +// 不报错 +'use strict'; +if (true) { + function f() {} +} + +// 报错 +'use strict'; +if (true) + function f() {} +``` + +另外,这样声明的函数,在区块外是不可用的。 + +```javascript +'use strict'; +if (true) { + function f() {} +} +f() // ReferenceError: f is not defined +``` + +上面代码中,函数`f`是在块级作用域内部声明的,外部是不可用的。 ## const命令