繁体   English   中英

任何人都可以从jCarousel解释以下JavaScript代码吗?

[英]Can anybody explain the following JavaScript code from jCarousel?

我已经写了一段时间的JS,我一直在尝试调试jQuery jCarousel插件以兼容IE7。 很多变量都是混淆的,这没关系,但我从未见过这样的语法:

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

我从来没有看到一个函数被指定为迭代器,并且内部的块语句看起来像第一个例子。 我知道在编写代码时我们都会努力节省几个字节,但对我而言,这种狂热的尝试是以给其他程序员带来完全混乱和困惑的代价。 任何人都可以给我一个简单的,“速记”替代/彻底解释发生了什么? 我总是想更多地了解这种语言以及它是如何工作的,谢谢。

&&运算符计算每个表达式,直到它找到一个真实的表达式,然后返回它。 如果没有一个是真的,它会返回最后一个。

,操作者会评估它的操作数和返回第二个(无论他们返回的内容)。

所以在第一个例子中,它基本上是这样说的:

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

至于第二个例子中,要注意的迭代过很重要k变量,而不是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)
    }
}

对于第二个示例,不要忘记可以使用,在一个var语句中定义多个变量

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

重要的是要知道开发人员自己并没有像这样最小化代码; 他在易于阅读的块中用有意义的变量名编写正常的源代码 当谈到发布时间时,他将通过缩小UglifyJSClosure Compiler等)运行缩小版本以获得简化代码。

由于短路评估:

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

基本上相当于:

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

并且表达式的值将是e

在第二个例子中,函数不是迭代器,他只是使用for循环的第一个位置来初始化一个匿名函数,然后将它分配给一个

该代码的作者只是过于简洁。 只因为你可以,并不意味着你应该。

更新

这是重写第二个应该在功能上等效的例子:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM