JavaScriptで複数の変数を宣言する


Answers

メンテナンス性に加えて、第1の方法は、事故グローバル変数作成の可能性を排除します。

(function () {
var variable1 = "Hello World!" // semicolon is missed out accidently
var variable2 = "Testing..."; // still a local variable
var variable3 = 42;
}());

第二の方法はあまり寛容ではありませんが、

(function () {
var variable1 = "Hello World!" // comma is missed out accidently
    variable2 = "Testing...", // becomes a global variable
    variable3 = 42; // a global variable as well
}());
Question

JavaScriptでは、以下のような複数の変数を宣言することができます:

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

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

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

1つの方法が他の方法よりも優れているか、または速いのですか?




私は最初の方法(複数のvars)が最良だと思います。そうでなければノックアウトを使用するアプリケーションからこれで終わることができます。これは私の意見では読みにくいものです。

    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;
        });



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

以下より読みやすい

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

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




私の唯一の、しかしまだ必須のコンマの使用はforループです:

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

私はJavaScriptでこれがOKかどうかを調べるためにここに行った。

それが機能しているのを見ても、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");

私は確かに、言​​語を切り替えることはできませんでした。




このようにすると読みやすくなります:

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

しかし、このようにコードとスペースを少なくします。

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

スペースを節約するのには理想的ですが、JavaScript圧縮機で処理してください。




シングルステートメントバージョン(単一var )を避けるもう一つの理由は、デバッグです。 いずれかの代入線で例外がスローされた場合 、スタックトレースには1行だけが表示されます。

カンマ構文で定義された10個の変数がある場合、どの変数が原因であるかを直接知る方法がありません。

個々のステートメントバージョンはこのあいまいさに悩まされません。




ECMAScript6は、かなりうまくいく構造化割り当てを導入しました:

[a, b] = [1, 2] aは1に等しくなり、 bは2に等しくなります。




Use ES6 Destructuring assignment :アレイからの値またはオブジェクトからのプロパティを個別の変数にアンパックします。

let [variable1 , variable2, variable3] = 
["Hello World!", "Testing...", 42];

console.log(variable1); // Hello World!
console.log(variable2); // Testing...
console.log(variable3); // 42