File tree Expand file tree Collapse file tree 1 file changed +7
-4
lines changed Expand file tree Collapse file tree 1 file changed +7
-4
lines changed Original file line number Diff line number Diff line change @@ -422,11 +422,13 @@ console.log(a.foo);
422
422
但是,这里有一个问题,全局变量` global._foo ` 是可写的,任何文件都可以修改。
423
423
424
424
``` javascript
425
+ global ._foo = { foo: ' world' };
426
+
425
427
const a = require (' ./mod.js' );
426
- global . _foo = 123 ;
428
+ console . log ( a . foo ) ;
427
429
```
428
430
429
- 上面的代码,会使得别的脚本加载 ` mod.js ` 都失真 。
431
+ 上面的代码,会使得加载 ` mod.js ` 的脚本都失真 。
430
432
431
433
为了防止这种情况出现,我们就可以使用 Symbol。
432
434
@@ -448,8 +450,9 @@ module.exports = global[FOO_KEY];
448
450
上面代码中,可以保证` global[FOO_KEY] ` 不会被无意间覆盖,但还是可以被改写。
449
451
450
452
``` javascript
453
+ global [Symbol .for (' foo' )] = { foo: ' world' };
454
+
451
455
const a = require (' ./mod.js' );
452
- global [Symbol .for (' foo' )] = 123 ;
453
456
```
454
457
455
458
如果键名使用` Symbol ` 方法生成,那么外部将无法引用这个值,当然也就无法改写。
@@ -461,7 +464,7 @@ const FOO_KEY = Symbol('foo');
461
464
// 后面代码相同 ……
462
465
```
463
466
464
- 上面代码将导致其他脚本都无法引用` FOO_KEY ` 。但这样也有一个问题,就是如果多次执行这个脚本,每次得到的` FOO_KEY ` 都是不一样的。虽然 Node 会将脚本的执行结果缓存,一般情况下,不会多次执行同一个脚本,但是用户可以手动清除缓存,所以也不是完全可靠 。
467
+ 上面代码将导致其他脚本都无法引用` FOO_KEY ` 。但这样也有一个问题,就是如果多次执行这个脚本,每次得到的` FOO_KEY ` 都是不一样的。虽然 Node 会将脚本的执行结果缓存,一般情况下,不会多次执行同一个脚本,但是用户可以手动清除缓存,所以也不是绝对可靠 。
465
468
466
469
## 内置的 Symbol 值
467
470
You can’t perform that action at this time.
0 commit comments