我怎么读这个?

时间:2014-01-23 18:27:15

标签: javascript

我正在尝试理解一个jQuery插件,我在整个未缩小的源头上看到这样的事情:

"y" === self.options.direction && node.stop().scrollTop(floorActive * WH),
"x" === self.options.direction && (node.stop().scrollLeft(floorActive * WW), nodeChildren.each(function(index) {
    $(this).css("left", index * WW);
})), chocolate && (nodeChildren.each(function(index) {
    $(this).css({
        left: self.options.direction[index][1] * WW,
        top: self.options.direction[index][0] * WH
    });
}), node.stop().scrollLeft(self.options.direction[floorActive][1] * WW).scrollTop(self.options.direction[floorActive][0] * WH));

我到处都看到类似的东西:

return $.each(floorCollection, function() {
    (!floor || Math.abs(this[axis] - goal) > Math.abs(floor[axis] - goal)) && (floor = this);
}), floor && -1 !== directionArray.indexOf(floor) ? directionArray.indexOf(floor) : false;

这些东西通常会用更传统的语法写出来吗?

2 个答案:

答案 0 :(得分:3)

不确定你在说什么,但这里的代码更具可读性:

if ("y" === self.options.direction) {
    node
        .stop()
        .scrollTop(floorActive * WH);
}
if ("x" === self.options.direction) {
    node
        .stop()
        .scrollLeft(floorActive * WW);
    nodeChildren.each(function(index) {
        $(this).css("left", index * WW);
    });
}
if (chocolate) {
    nodeChildren.each(function(index) {
        $(this).css({
            left: self.options.direction[index][1] * WW,
            top: self.options.direction[index][0] * WH
        });
    });
    node
        .stop()
        .scrollLeft(self.options.direction[floorActive][1] * WW)
        .scrollTop(self.options.direction[floorActive][0] * WH);
}

第二个:

$.each(floorCollection, function() {
    if (!floor || Math.abs(this[axis] - goal) > Math.abs(floor[axis] - goal)) {
        floor = this;
    }
});
if (floor && -1 !== directionArray.indexOf(floor)) {
    return directionArray.indexOf(floor);
} else {
    return false;
}

答案 1 :(得分:3)

这里有一些不同的事情 - 我同意他们中的大多数并不一定是最佳实践。

  • 作者似乎正在使用commas to group expressions,这有效地将它们放入一个声明中。

  • 作者使用condition && statement if (condition) { statement }来表示condition && (expression, expression, expression)。使用逗号和括号可以使if (condition) { statement; statement; statement; }... && (floor = this)相同。这会导致一些不太清晰的代码,如5 == x,其中一个语句包含在括号中,以允许将其作为表达式进行求值。

  • 作者正在使用左手比较,即x == 5而不是=。这样做的一个优点是错误地使用==而不是(a || b) > foo是语法错误。

  • 作者在比较中使用短路评估,即a,如果a是真实的,则b或{{1}}进行比较。

所有这些都是有效的,我认为没有特别推荐。特别是逗号似乎是一种非常难以辨认的方法。