0

私はしばらくの間JSを書いていて、IE7との互換性のためにjQueryjCarouselプラグインをデバッグしようとしています。多くの変数が難読化されていますが、これは問題ありませんが、次のような構文は見たことがありません。

scroll: function (a, c) {
    !this.locked && !this.animating && (this.pauseAuto(), this.animate(this.pos(a), c))
}

ある種の速記法のように思えますが、私はこのようなものに出くわしたことがありません。
同様に、

for (var a = function (a) {
    i.get(a).each(function () {
        h(i, this, a, b, c)
    })
}, k = d; k <= f; k++)  {
    k !== null && !(k >= j && k <= e) && a(k)
}

関数がイテレータとして割り当てられているのを見たことがありません。また、内部のブロックステートメントは最初の例のように見えます。コードを書くとき、私たち全員が数バイトを節約しようと努力していることは知っていますが、私にとってこの熱狂的な試みは、他のプログラマーにとって完全な混乱と当惑を犠牲にしてもたらされます。誰かが私に何が起こっているのかについての簡単な「長い手」の代替/完全な説明を与えることができますか?私はいつもこの言語とそれがどのように機能するかについてもっと知りたいです、ありがとう。

4

2 に答える 2

2

&&演算子は、真の式が見つかるまで各式を評価し、それを返します。どれも真実でない場合は、最後のものを返します。

,演算子は両方のオペランドを評価し、2 番目のオペランドを返します (何を返すかに関係なく)。

したがって、最初の例では、基本的に次のように言っています。

scroll: function (a, c) {
    if (!this.locked && !this.animating) {
        this.pauseAuto();
        this.animate(this.pos(a), c)
    }
}

k2 番目の例については、反復が変数ではなく変数であることに注意することが重要aです。

var a = function (a) {
    i.get(a).each(function () {
        h(i, this, a, b, c)
    })
};

for (k = d; k <= f; k++)  {
    if (k !== null && !(k >= j && k <= e)) {
        a(k)
    }
}

2 番目の例では、 を使用して1 つのステートメントで複数の変数を定義できることを忘れないでください。var,

var a = 1,
    b = 2,
    c = 3;

開発者自身がこのようにコードを最小化していないことを知っておくことは重要です。彼は読みやすいブロックに意味のある変数名を付けた通常のソースコードを書いています。リリース時には、縮小されたコードを取得するために縮小版 ( UglifyJSClosure Compilerなど) を介して縮小版を実行します。

于 2012-04-20T16:04:58.267 に答える
0

短絡評価のため:

a && b && (c, d, e);

基本的には次と同等です:

if (a) {
    if (b) {
        c;
        d;
        e;
    }
}

そして式の値はeになります。

2 番目の例では、関数は反復子ではなく、for ループの最初の位置を使用して無名関数を初期化し、それをaに割り当てているだけです。

そのコードの作成者は、過度に簡潔です。できるからといって、そうすべきだというわけではありません。

更新

以下は、機能的に同等であるはずの 2 番目の例を書き直したものです。

function a (a) {
    i.get(a).each(function () {
        h(i, this, a, b, c)
    });
}

for (k = d; k <= f; k++)  {
    if ((k !== null) && (!(k >= j && k <= e))) {
        a(k);
    }
}
于 2012-04-20T16:04:54.597 に答える