"var { someName } = require('something')" 是什么意思?

what "var { someName } = require('something')" means?

我正在阅读有关 firefox 插件的 MDN 文档,我看到了一些我不理解的语法。
在其中一个例子中,他们说:

var { ToggleButton } = require('sdk/ui/button/toggle');
var panels = require("sdk/panel");
var self = require("sdk/self");

var button = ToggleButton({
  ...
});

为什么变量名在大括号内:var { ToggleButton } =?

这里发生了什么?

您正在见证 ES 2015 新功能解构的用法。

参考:https://github.com/lukehoban/es6features#destructuring

Firefox 支持对象解构: https://kangax.github.io/compat-table/es6/#destructuring_with_objects

更新:

这是证明。 ToggleButton 模块导出 ToggleButton 对象: https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/ui/button/toggle.js#L79

并且根据 ES 2015 解构规则,它被正确解构为 { ToggleButton }