在dojo 1.9源代码中,dijit / nls / common.js我看到了这个
define({ root:
({
buttonOk: "OK",
buttonCancel: "Cancel",
buttonSave: "Save",
itemClose: "Close"
})
//etc
为什么作者使用了
( { /*data*/ } )
构建体?这究竟意味着什么?为什么{}不够? ()可能是分隔表达式,但为什么有必要这样做呢?
答案 0 :(得分:1)
我认为这个特定的例子没有任何理由。
但在某些情况下......
(请注意,如果对象出现在需要语句的位置,您可能需要将对象文字包装在括号中,以免文字与块语句混淆。)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
eval()
可能与它有关,但在你的特定例子中,JS解析器应该处理代码,不应该使用eval()
。
E.g。 (没有括号):
SyntaxError: invalid label
eval("{a:1, b:2}")
和(括号):
>>> eval("({a:1, b:2})")
Object { a=1, b=2}
也许它与Dojo的构建过程有关,并且NLS模块被重新格式化以需要括号?似乎不太可能,因为这似乎很脆弱,构建过程本身可以轻松添加括号。
编辑:我刚刚在GitHub上查看了此文件的历史记录。
原始版本(在GitHub中 - https://github.com/dojo/dijit/blob/11f94ad6cebba102b8411ed1a67e35aed94a97bb/nls/common.js)如下所示:
({
buttonOk: "OK",
buttonCancel: "Cancel",
buttonSave: "Save",
notSet: "Not set",
left: "Left",
right: "Right",
center: "Center",
middle: "Middle",
top: "Top",
bottom: "Bottom",
//units
unitPixel: "pixels",
unitPercent: "percent",
width: "Width",
height: "Height"
})
所以我猜这个文件最初是eval
'd,括号在历史上是必要的,但是随着向AMD转移,它变得有些多余。
当然可能是错的!