小编典典

var {…} =…语句中的花括号有什么作用?

javascript

不知道这是否是Mozilla特定的JS语法,但是我经常发现以这种方式声明变量,例如,在附加SDK
docs中:

var { Hotkey } = require("sdk/hotkeys");

并在各种Chrome Javascript中(let使用代替的语句var),

let { classes: Cc, interfaces: Ci, results: Cr, utils: Cu }  = Components;

我发现这很令人困惑,但即使在MDN上,我也找不到有关这两种语法的任何文档。


阅读 615

收藏
2020-05-01

共1个答案

小编典典

它们都是JavaScript 1.7的功能。第一个是block-level variables: :

let允许您声明变量,将其范围限制为使用该变量的块,语句或表达式。这与var关键字不同,该关键字在全局范围内或整个函数本地定义变量,而与块范围无关。

第二种方法称为destructuring::

通过解构分配,可以使用与数组和对象文字相同的语法来从数组或对象中提取数据。
......
你可以用解构赋值做一个特别有用的事情是在一个单独的语句来读取整个结构,但也有一些有趣的事情,你可以与他们无关,如图中充满了如下例子部分。

对于熟悉Python的人来说,它类似于以下语法:

>>> a, (b, c) = (1, (2, 3))
>>> a, b, c
(1, 2, 3)

第一个代码块是以下内容的简写:

var {Hotkey: Hotkey} = require("sdk/hotkeys");
// Or
var Hotkey = require("sdk/hotkeys").Hotkey;

您可以将第二个代码块重写为:

let Cc = Components.classes;
let Ci = Components.interfaces;
let Cr = Components.results;
let Cu = Components.utils;
2020-05-01