【发布时间】:2018-04-17 10:52:12
【问题描述】:
我不是 javascript 程序员,我完全不知道这段代码的作用和用途:
function map(x) {
x = Object.create(null);
x.x = 0;
delete x.x;
return x;
}
这是您使用 dart2js 编译器时获得的一部分。
我并不是想了解整个上下文,但是分配属性并再次直接删除它有助于实现什么?
这看起来比一些内部 JS 引擎行为更聪明。
EDIT:根据要求,这是由 dart2js 生成的完整 out.js(输入是“Hello world!”示例维基百科):https://gist.github.com/Blutkoete/59be155b2642832e9acd383df0857d02
编辑 2:gurvinder372 的链接表明与“委托给匿名 JS 对象以提高性能”有关,但我可能需要大量的 JS 经验才能理解这一点。
【问题讨论】:
-
这段代码根本没有多大意义。它需要一个直接被覆盖的参数——这是第一个“错误”。给属性赋值并在之后删除它并没有真正改变任何东西。也许它是像
function map(x) { x = x || {}; }这样的代码的剩余部分,它应该确保没有设置某个属性 - 但那样做也没有意义 -
可以参考原代码吗? @Blutkoete
-
@lustoykov 完成。
-
这是一个性能微优化。该函数的工作方式与
function map() { return Object.create(null); }相同 - 它创建一个空对象用作查找图。
标签: javascript