javascript - Javascript 的缺点 "single var pattern"

标签 javascript design-patterns variable-assignment declaration variable-declaration

在 Stefanov 的 JS Design Patterns 一书中,他写道“你使用一个 var 语句并声明多个以逗号分隔的变量”,然后给出了一个“单一 var”模式的示例,如下所示:

function func() {
    var a = 1,
        b = 2,
        sum = a + b,
        myobject = {},
        i,
        j;

Stefanov 还写道:

  • “在声明变量时也使用初始值对其进行初始化是一种很好的做法。”
  • “您也可以在声明时做一些实际工作,例如前面代码中 sum = a + b 的情况。”

现在我有一些代码如下,使用单个 var 模式声明了相同数量的变量,但做了更多的“声明时的实际工作”:

var html = '{purchaseQty}<br>FR:&nbsp; {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
    };

做太多“申报时的实际工作”有什么坏处?顺便说一句,我不认为这与 Javascript single var pattern. Am I overloading it? 完全相同因为我问的是一般缺点,而不是我的代码可能有什么问题。

我想我可以看到一个普遍的缺点是无法检查错误,例如,在我的示例中,我对预期从 record.get 返回的字符串调用 trim(),但如果返回未定义,则“可以” t call method on undefined object”(或任何它是什么;)将被抛出。还有人能想到别的吗?

最佳答案

我个人支持 Douglas Crockford(尽管我很欣赏那些不同意这一点的人),在函数顶部声明 var 最有意义,因为 JavaScript 没有 block 作用域。

来自JSLint site :

In languages with block scope, it is usually recommended that variables be declared at the site of first use. But because JavaScript does not have block scope, it is wiser to declare all of a function's variables at the top of the function. It is recommended that a single var statement be used per function.

唯一的缺点是您的代码对于来自 C 语言或基于 C 语言背景的人而言可读性较差。

我担心我在这里听起来可能像个 Crockford 粉丝,但我会 recommend this talk on coding style以及为什么有时您的大脑应该用代码结构来控制您的心脏(取决于语言)。

关于javascript - Javascript 的缺点 "single var pattern",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8581869/

相关文章:

javascript - 单击弹出区域之外时,弹出窗口将返回隐藏状态

python - 调度字典但将不同的参数传递给函数

spring - 为什么我们需要服务层?

ruby-on-rails - 变量赋值

arrays - Powershell 数组赋值分配变量,而不是值?

c# - 在 C# 中,字符串类型如何传递给方法或分配给变量?

javascript - 将传单弹出信息添加到特定的div

javascript - Chrome 中的嵌套 Web Worker

javascript - 基于网格高度的颜色 Three.js

Java 模式 : when does it make sense to use temporary variables