这是一个糟糕的Javascript练习我在这里做什么?

Cyb*_*rix 5 javascript jquery memory-management

出于某种原因,我每次都这样做,因为我发现它很干净.我在顶部声明变量以在下面使用它们.即使我只使用它一次,我也这样做.

这是一个例子(使用jQuery框架):

$("#tbListing").delegate("a.btnEdit", "click", function(e) {
    var storeId = $(this).closest("tr").attr("id").replace("store-", ""),
        storeName = $(this).closest("tr").find("td:eq(1)").html(),
        $currentRow = $(this).closest("tr");

    $currentRow.addClass("highlight");

    $("#dialogStore")
        .data("mode", "edit")
        .data("storeId", storeId)
        .data("storeName", storeName)
        .dialog( "open" );

    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

我也倾向于这样做PHP.如果我认为这样做的记忆效率不高,我是对的吗?

编辑:谢谢你的所有答案.你们都得到了很好的答案.现在关于代码优化.现在好多了?

            $("#tbListing").delegate("a.btnEdit", "click", function(e) {
                var $currentRow = $(this).closest("tr"),
                    storeId = this.rel, /*storing the storeId in the edit button's rel attribute now*/
                    storeName = $currentRow.find("td:eq(1)").html();

                $currentRow.addClass("highlight");

                $("#dialogStore")
                    .data("info", {
                        "mode" : "edit",
                        "storeId" : storeId,
                        "storeName" : storeName
                    }) /*can anyone confirm that overusing the data isn't very efficient*/
                    .dialog( "open" );


                e.preventDefault();
            });
Run Code Online (Sandbox Code Playgroud)

Ski*_*ick 12

对不起,您是否在询问是否可以声明变量,即使您使用过一次?

绝对!如果用变量正确命名,它会使代码的可读性提高一百万倍.可读性应该是您最关心的问题.如果事实证明有问题,那么记忆效率应该只是一个问题.

正如Knuth所说,

我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源.

如果你要求更多关于在函数开头声明变量而不是第一次使用它们的地方,那么Emmett说得对 - Crockford建议在JavaScript中这样做以避免与范围相关的混淆.在PHP中是否值得它是一个纯粹主观的问题我会说,但保持你的PHP和JS编码风格类似没有错.


再一次CS报价(来自Abelson和Sussman的SICP):

必须编写程序供人们阅读,并且只能偶然为机器执行.


Emm*_*ett 6

这不是一种糟糕的做法.

var语句应该是函数体中的第一个语句.


JavaScript没有块范围,因此在块中定义变量会使经验丰富的程序员与其他C族语言混淆.定义函数顶部的所有变量.

http://javascript.crockford.com/code.html

  • 不是每个人都同意克罗克福德所说的一切,尤其是在这一点上.我当然不会. (5认同)