mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2024-04-21 12:32:22 +00:00
Merge branch 'gh-pages' of github.com:ruanyf/es6tutorial into gh-pages
This commit is contained in:
@@ -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`写成函数来解决。
|
||||
|
||||
|
||||
@@ -1032,6 +1032,7 @@ const proto = {
|
||||
};
|
||||
|
||||
const obj = {
|
||||
foo: 'world',
|
||||
find() {
|
||||
return super.foo;
|
||||
}
|
||||
|
||||
+1
-1
@@ -105,7 +105,7 @@ ES6 新增了使用大括号表示 Unicode 字符,这种表示法在正则表
|
||||
/^\S$/u.test('𠮷') // true
|
||||
```
|
||||
|
||||
上面代码的`\S`是预定义模式,匹配所有不是空格的字符。只有加了`u`修饰符,它才能正确匹配码点大于`0xFFFF`的 Unicode 字符。
|
||||
上面代码的`\S`是预定义模式,匹配所有非空白字符。只有加了`u`修饰符,它才能正确匹配码点大于`0xFFFF`的 Unicode 字符。
|
||||
|
||||
利用这一点,可以写出一个正确返回字符串长度的函数。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user