Geo*_*pty 5 javascript design-patterns declaration variable-assignment variable-declaration
在Stefanov的JS Design Patterns一书中,他写道"你使用一个var语句并声明用逗号分隔的多个变量",然后给出一个"single var"模式的例子,如下所示:
function func() {
var a = 1,
b = 2,
sum = a + b,
myobject = {},
i,
j;
Run Code Online (Sandbox Code Playgroud)
斯特凡诺夫还写道:
现在我有一些代码如下,用单个var模式声明相同数量的变量,但做了更多"声明时的实际工作":
var html = '{purchaseQty}<br>FR: {fromLoc}'
,tpl = new Ext.XTemplate(html)
,srcReqLoc = record.get('SRC_REQUEST_LOC').trim()
,srcSupLoc = record.get('SRC_SUP_LOC').trim()
,fromLoc = srcReqLoc ? srcReqLoc : srcSupLoc
,tplCfg = {
purchaseQty: purchaseQty
,fromLoc: fromLoc
};
Run Code Online (Sandbox Code Playgroud)
做太多"宣布时的实际工作"有什么缺点?顺便说一下,我不认为这是Javascript单一var模式的完全重复.我超载了吗?因为我问的是一般的缺点,而不仅仅是我的代码可能出错.
我想我可以看到一般的缺点是无法检查错误,例如在我的例子中我在从record.get预期返回的字符串上调用trim(),但如果返回undefined,则"无法调用方法"在未定义的对象上"(或者它是什么;)将被抛出.任何人都可以想到其他什么吗?
我个人支持道格拉斯·克罗克福德(尽管我很欣赏那些不支持这一点的人),在函数顶部声明变量最有意义,因为JavaScript没有块范围.
来自JSLint站点:
在具有块范围的语言中,通常建议在首次使用的站点声明变量.但是因为JavaScript没有块范围,所以在函数顶部声明所有函数的变量是明智的.建议每个函数使用一个var语句.
唯一的缺点是,对于来自基于C或C的背景的人来说,您的代码可读性较差.
我很谨慎,我可能听起来像这里的Crockford粉丝,但我建议这个关于编码风格的讨论,为什么有时候你的大脑应该通过代码结构(取决于语言)统治你的心脏.
将所有变量声明在范围的顶部,即函数的开头或全局代码的开头是有意义的.我同意这一点.
至于在声明时提供初始值,我将其视为更多的指导原则.一般来说,它是一个很好的计划,当然适用于简单的值,但有时直到经过一些更复杂的计算之后才知道初始值 - 在这种情况下,我不提供永远不会仅仅为了提供而使用的默认值一些价值.有时候它太乱了.
此外,我不会在声明时给循环索引变量一个初始值 - 对我来说,在循环开始时分配值要清楚得多.
正如您已经指出的那样,如果您需要处理异常等等,您也需要稍后在函数中执行此操作.
只是使用一些常识:如果你有很多变量,你可能会发现你的var语句有点不可读,那么你可以将一些初始化移到函数的后面.
对我来说,你的示例代码是可以的,但如果你需要添加更多内容,它会有点难以阅读,因为在密集块中的那么多代码我不能轻易地选择变量名称,但是 - 和这显然是一个品味问题 - 你可以添加一些空白:
var html = '{purchaseQty}<br>FR: {fromLoc}'
,tpl = new Ext.XTemplate(html)
,srcReqLoc = record.get('SRC_REQUEST_LOC').trim()
,srcSupLoc = record.get('SRC_SUP_LOC').trim()
,fromLoc = srcReqLoc ? srcReqLoc : srcSupLoc
,tplCfg = {
purchaseQty: purchaseQty
,fromLoc: fromLoc
};
Run Code Online (Sandbox Code Playgroud)
(将=符号对齐,或将相关变量与空行或两者组合在一起.)
| 归档时间: |
|
| 查看次数: |
3118 次 |
| 最近记录: |