Merge branch 'gh-pages' of github.com:ruanyf/es6tutorial into gh-pages

This commit is contained in:
ruanyf
2018-03-06 12:13:09 +08:00
3 changed files with 3 additions and 2 deletions
+1 -1
View File
@@ -631,7 +631,7 @@ ReferenceError: foo is not defined
上面代码中,执行`a.mjs`以后会报错,`foo`变量未定义,这是为什么?
让我们一行行来看,ES6 循环加载是怎么处理的。首先,执行`a.mjs`以后,引擎发现它加载了`b.mjs`,因此会优先执行`b.mjs`,然后再执行`a.js`。接着,执行`b.mjs`的时候,已知它从`a.mjs`输入了`foo`接口,这时不会去执行`a.mjs`,而是认为这个接口已经存在了,继续往下执行。执行到第三行`console.log(foo)`的时候,才发现这个接口根本没定义,因此报错。
让我们一行行来看,ES6 循环加载是怎么处理的。首先,执行`a.mjs`以后,引擎发现它加载了`b.mjs`,因此会优先执行`b.mjs`,然后再执行`a.mjs`。接着,执行`b.mjs`的时候,已知它从`a.mjs`输入了`foo`接口,这时不会去执行`a.mjs`,而是认为这个接口已经存在了,继续往下执行。执行到第三行`console.log(foo)`的时候,才发现这个接口根本没定义,因此报错。
解决这个问题的方法,就是让`b.mjs`运行的时候,`foo`已经有定义了。这可以通过将`foo`写成函数来解决。
+1
View File
@@ -1032,6 +1032,7 @@ const proto = {
};
const obj = {
foo: 'world',
find() {
return super.foo;
}
+1 -1
View File
@@ -105,7 +105,7 @@ ES6 新增了使用大括号表示 Unicode 字符,这种表示法在正则表
/^\S$/u.test('𠮷') // true
```
上面代码的`\S`是预定义模式,匹配所有不是空格的字符。只有加了`u`修饰符,它才能正确匹配码点大于`0xFFFF`的 Unicode 字符。
上面代码的`\S`是预定义模式,匹配所有非空白字符。只有加了`u`修饰符,它才能正确匹配码点大于`0xFFFF`的 Unicode 字符。
利用这一点,可以写出一个正确返回字符串长度的函数。