379

JavaScript では、次のように複数の変数を宣言できます。

var variable1 = "Hello, World!";
var variable2 = "Testing...";
var variable3 = 42;

...または次のように:

var variable1 = "Hello, World!",
    variable2 = "Testing...",
    variable3 = 42;

ある方法は他の方法よりも優れている/速いですか?

4

18 に答える 18

384

最初の方法は保守が簡単です。各宣言は 1 行の 1 つのステートメントであるため、宣言を簡単に追加、削除、および並べ替えることができます。

var2 番目の方法では、最初または最後の宣言がキーワードから始まり、セミコロンで終わるため、それらを削除するのが面倒です。新しい宣言を追加するたびに、最後の古い行のセミコロンをコンマに置き換える必要があります。

于 2009-03-29T05:40:36.153 に答える
227

保守性に加えて、最初の方法は、誤ってグローバル変数が作成される可能性を排除します。

(function () {
var variable1 = "Hello, World!" // Semicolon is missed out accidentally
var variable2 = "Testing..."; // Still a local variable
var variable3 = 42;
}());

2 番目の方法は寛容ではありませんが、次のようになります。

(function () {
var variable1 = "Hello, World!" // Comma is missed out accidentally
    variable2 = "Testing...", // Becomes a global variable
    variable3 = 42; // A global variable as well
}());
于 2011-09-12T07:23:18.200 に答える
39

このようにすると、はるかに読みやすくなります。

var hey = 23;
var hi = 3;
var howdy 4;

ただし、この方法ではスペースとコード行が少なくて済みます。

var hey=23,hi=3,howdy=4;

スペースを節約するには理想的ですが、JavaScript コンプレッサに処理させてください。

于 2012-06-03T20:21:41.437 に答える
33

組織のスコープごとに1 つのvarステートメントを使用するのが一般的です。すべての「スコープ」が同様のパターンに従っているため、コードが読みやすくなっています。さらに、エンジンはとにかくそれらすべてを一番上に「巻き上げ」ます。したがって、宣言をまとめておくと、実際に起こることをより厳密に模倣できます。

于 2009-11-20T23:23:37.583 に答える
29

ECMAScript 2015では、非常にうまく機能する分割代入が導入されました。

[a, b] = [1, 2]

aと等しく1なりbます2

于 2016-07-21T14:36:52.703 に答える
18

それは個人的な好みの問題です。これら 2 つの方法に違いはありませんが、2 番目の形式で空白を削除すると数バイトが節約されます。

于 2009-03-29T04:39:36.067 に答える
16

多分このように

var variable1 = "Hello, World!"
, variable2 = 2
, variable3 = "How are you doing?"
, variable4 = 42;

最初または最後の変数を変更する場合を除いて、保守と読み取りが容易です。

于 2011-12-19T14:00:43.207 に答える
12
var variable1 = "Hello, World!";
var variable2 = "Testing...";
var variable3 = 42;

より読みやすい:

var variable1 = "Hello, World!",
    variable2 = "Testing...",
    variable3 = 42;

しかし、彼らは同じことをします。

于 2009-03-29T04:43:57.693 に答える
7

どちらも有効ですが、2 番目を使用すると、経験の浅い開発者が var ステートメントをあちこちに配置して巻き上げの問題を引き起こすことを思いとどまらせます。関数ごとに var が 1 つしかない場合、関数の先頭にあると、コード全体をデバッグしやすくなります。これは、変数が宣言されている行が、一部の人が好むほど明示的ではないことを意味する場合があります。

開発者が好きな場所に「var」をドロップすることをやめさせることを意味する場合、トレードオフは価値があると思います。

人々はJSLintについて不平を言うかもしれませんが、私もそうですが、その多くは言語の問題を修正するためではなく、コーダーの悪い習慣を修正し、それによって彼らが書くコードの問題を防ぐためのものです。したがって:

「ブロックスコープを持つ言語では、通常、最初に使用する場所で変数を宣言することが推奨されます。しかし、JavaScript にはブロックスコープがないため、関数のすべての変数を関数の先頭で宣言する方が賢明です。関数ごとに 1 つの var ステートメントを使用することをお勧めします。」- http://www.jslint.com/lint.html#scope

于 2014-09-08T17:37:57.473 に答える
7

コンマの私の唯一の、しかし不可欠な使用法は、forループ内です。

for (var i = 0, n = a.length; i < n; i++) {
  var e = a[i];
  console.log(e);
}

これが JavaScript で問題ないかどうかを調べるために、ここに行きました。

nそれが機能するのを見ても、関数にローカルかどうかという疑問が残りました。

これnはローカルであることを確認します:

a = [3, 5, 7, 11];
(function l () { for (var i = 0, n = a.length; i < n; i++) {
  var e = a[i];
  console.log(e);
}}) ();
console.log(typeof n == "undefined" ?
  "as expected, n was local" : "oops, n was global");

言語を切り替えながら、一瞬わからなかった。

于 2013-02-08T04:52:28.460 に答える
0

最初の方法 (複数の変数) が最適だと思います。それ以外の場合は ( KnockoutJSを使用するアプリケーションから)、私の意見では読みにくい:

    var categories = ko.observableArray(),
        keywordFilter = ko.observableArray(),
        omniFilter = ko.observable('').extend({ throttle: 300 }),
        filteredCategories = ko.computed(function () {
            var underlyingArray = categories();
            return ko.utils.arrayFilter(underlyingArray, function (n) {
                return n.FilteredSportCount() > 0;
            });
        }),
        favoriteSports = ko.computed(function () {
            var sports = ko.observableArray();
            ko.utils.arrayForEach(categories(), function (c) {
                ko.utils.arrayForEach(c.Sports(), function (a) {
                    if (a.IsFavorite()) {
                        sports.push(a);
                    }
                });
            });
            return sports;
        }),
        toggleFavorite = function (sport, userId) {
            var isFavorite = sport.IsFavorite();

            var url = setfavouritesurl;

            var data = {
                userId: userId,
                sportId: sport.Id(),
                isFavourite: !isFavorite
            };

            var callback = function () {
                sport.IsFavorite(!isFavorite);
            };

            jQuery.support.cors = true;
            jQuery.ajax({
                url: url,
                type: "GET",
                data: data,
                success: callback
            });
        },
        hasfavoriteSports = ko.computed(function () {
            var result = false;
            ko.utils.arrayForEach(categories(), function (c) {
                ko.utils.arrayForEach(c.Sports(), function (a) {
                    if (a.IsFavorite()) {
                        result = true;
                    }
                });
            });
            return result;
        });
于 2014-01-27T11:15:54.477 に答える