variables 配列 jquery - JavaScriptで複数の変数を宣言する



8 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
}());
変数宣言 初期化 代入

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

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

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

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

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




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

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

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

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

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




多分このように

var variable1 = "hello world"
, variable2 = 2
, variable3 = "how are you doing"
, variable4 = 42;

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




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

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




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

私は、開発者がどこにいても「var」を落とすことをやめてしまうのであれば、トレードオフはそれに値すると感じています。

人々はJSLintについて文句を言うかもしれませんが、私もそうしますが、言語の問題を修正するのではなく、コーダーの悪い習慣を修正して、コードの問題を防ぐことができます。 したがって:

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




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




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

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

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




私は最初の方法(複数の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;
        });



Related