sfl*_*che 4 javascript ecmascript-6 es6-modules
据我所知,导入绑定是不可变的
import { foo } from './foo';
...
foo.bar = 23; // works
...
foo = { bar: 23 }; // syntax error
Run Code Online (Sandbox Code Playgroud)
但是,我在其他地方读过JS导入实际上是不可写的(不是不可变的)......在这种情况下,第一个赋值语句foo.bar = 23;也不会抛出语法错误?
更新(我现在如何理解)
......用@FelixKing的优秀答案来解释......
JS导入是对导出的东西(变量,函数等)的不可变绑定.
对于非原始导入,这并不意味着导入对象上的属性必须是不可变的或不可写的.
在这种情况下不会是第一个赋值语句,foo.bar = 23; 还会抛出语法错误?
不可写是指变量的值,其中可变(不可变)描述值本身是否可以就地更改.
你发现进口是不可写的.但是如果导入的值是可变的,那么您可以更新值(就地).
foo.bar = 23;
Run Code Online (Sandbox Code Playgroud)
不会为其分配新值foo.它正在读取值foo然后修改它(通过添加或覆盖属性).如果你这样做了
var oldFoo = foo;
foo.bar = 23;
oldFoo === foo; // true
Run Code Online (Sandbox Code Playgroud)
你会得到的true.这表明foo仍然分配了相同的值.它只更新了值(对象).
所有对象都是可变的(除非传递给Object.freeze或类似的函数),而原始值(String,Number等)都是不可变的.
| 归档时间: |
|
| 查看次数: |
784 次 |
| 最近记录: |