相关疑难解决方法(0)

ES6 WeakMap的实际用途是什么?

WeakMapECMAScript 6中引入的数据结构的实际用途是什么?

由于弱映射的键会创建对其相应值的强引用,因此只要其键仍处于活动状态,确保插入到弱映射中的值永远不会消失,它不能用于备注表,缓存或您通常使用弱引用的任何其他内容,具有弱值的映射等.

在我看来,这个:

weakmap.set(key, value);
Run Code Online (Sandbox Code Playgroud)

......这只是一种迂回的说法:

key.value = value;
Run Code Online (Sandbox Code Playgroud)

我错过了哪些具体的用例?

javascript weakmap ecmascript-6

374
推荐指数
7
解决办法
6万
查看次数

添加到'WeakSet`然后设法吹内存

这是我注意到的奇怪之处.下面的代码不应该像WeakSet使用的那样将内存浪费掉,显然没有其他引用留在下面:

'use strict';
require('babel-polyfill');

const s = new WeakSet();

for (let i = 0 ; ; i++) {
    s.add({});
    if (i % 100000 === 0)
        console.log(`${i} :${process.memoryUsage().heapUsed}`);
}
Run Code Online (Sandbox Code Playgroud)

(SCCE github repo here).

然而,打破它所做的记忆(Node v4.3.2Babel转换):

<--- Last few GCs --->

 165 ms: Scavenge 13.6 (48.0) -> 13.6 (48.0) MB, 14.4 / 0 ms   [allocation failure].
 189 ms: Scavenge 14.4 (48.0) -> 14.4 (52.0) MB, 17.6 / 0 ms [allocation failure].
 340 ms: Scavenge 37.5 …
Run Code Online (Sandbox Code Playgroud)

javascript node.js ecmascript-6 babeljs

7
推荐指数
1
解决办法
370
查看次数

ES6 Set,WeakSet,Map和WeakMap

关于地图和弱地图已经存在一些问题,例如:ES6 Map和WeakMap有什么区别?但我想问一下,在哪种情况下我应该赞成使用这些数据结构?或者当我偏爱其他人时,我应该考虑什么呢?

来自以下网址的数据结构示例:https://github.com/lukehoban/es6features

// Sets
var s = new Set();
s.add("hello").add("goodbye").add("hello");
s.size === 2;
s.has("hello") === true;

// Maps
var m = new Map();
m.set("hello", 42);
m.set(s, 34);
m.get(s) == 34;

// Weak Maps
var wm = new WeakMap();
wm.set(s, { extra: 42 });
wm.size === undefined

// Weak Sets
var ws = new WeakSet();
ws.add({ data: 42 });
// Because the added object has no other references, it will not be held …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

5
推荐指数
1
解决办法
635
查看次数

标签 统计

ecmascript-6 ×3

javascript ×3

babeljs ×1

node.js ×1

weakmap ×1