不知道这是否是Mozilla特定的JS语法,但是我经常发现以这种方式声明变量,例如,在附加SDK
docs中:
var { Hotkey } = require("sdk/hotkeys");
并在各种Chrome Javascript中(let
使用代替的语句var
),
let { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
我发现这很令人困惑,但即使在MDN上,我也找不到有关这两种语法的任何文档。
它们都是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;
问题内容: 我可以看到有两种不同的导入方式 第二个有括号。那么两者之间有什么区别?什么时候应该加上括号?谢谢 问题答案: 那么,是否应该 在方括号中 导入组件之间的区别在于您的方式。 出口有两种类型 默认导出 命名为出口 组件可以有 一个默认导出,零个或多个命名 导出 如果组件是默认导出,则需要不带括号将其导入,例如 导入为 命名的出口可能像 要么 您可以将其导入为 要么 如果您的组件有一个默认导
问题内容: 我试图理解下面两个require语句之间的区别。 具体来说,s包装的目的是什么? 它们似乎都分配了电子模块的内容,但是它们的功能显然不同。 谁能给我一些启示? 问题答案: 第二个示例使用解构。 这将调用从所需模块导出的特定变量(包括函数)。 例如(functions.js): 包含在您的文件中: 现在您可以分别给他们打电话了, 相对于: 使用点表示法调用: 希望这可以帮助。 您可以在此
问题内容: 我以为还会有另一个问题,但我找不到。在使用PHP的MySQL中,我通常用反引号封装字段名,以掩盖任何保留的名称或字符。但是,我的一位同事指出,这也可以使用方括号来实现。排除反引号与SQL Server不兼容的事实(显然),有什么区别?我应该使用哪个? 问题答案: SQL Server / T-SQL使用方括号(以及MS Access),而MySQL使用反引号。 据我所知,可以在文档中露
问题内容: 而且我仍然无法理解花括号的工作原理,特别是由于诸如简单程序这样的页面: http://wiki.python.org/moin/SimplePrograms 在各处使用大括号。我了解方括号和规则的圆括号,但是我不知道“定义字典”的含义或它们应该代表的含义。 问题答案: Python中使用“大括号”来定义字典。字典是一种将一个值映射到另一个值的数据结构,就像英语词典如何将单词映射到其定义
问题内容: 我在jQuery文件中找到了这个: 花括号做什么? 问题答案: 在您的情况下,这是一个传递给CSS函数的对象。 在这里你也可以使用 这是物体的另一个例子
问题内容: 我一直在我正在研究的代码库中看到类似以下的函数: 这到底在做什么?我很难在Google上找到它,因为我什至不确定这叫什么或如何在Google搜索中对其进行描述。 问题答案: 它正在解构,但包含在参数中。不含解构的等效项为: