基本var语法:变量已经定义?

时间:2013-12-21 10:43:08

标签: jquery

我有以下代码,它测试浏览器视口中是否存在元素:

(function ($) {
$.fn.visible = function (partial, hidden, direction) {

    var $t = $(this).eq(0),
        t = $t.get(0),
        $w = $(window),
        viewTop = $w.scrollTop(),
        viewBottom = viewTop + $w.height(),
        viewLeft = $w.scrollLeft(),
        viewRight = viewLeft + $w.width(),
        _top = $t.offset().top,
        _bottom = _top + $t.height(),
        _left = $t.offset().left,
        _right = _left + $t.width(),
        compareTop = partial === true ? _bottom : _top,
        compareBottom = partial === true ? _top : _bottom,
        compareLeft = partial === true ? _right : _left,
        compareRight = partial === true ? _left : _right,
        clientSize = hidden === true ? t.offsetWidth * t.offsetHeight : true,
        direction = (direction) ? direction : 'both';

    if (direction === 'both') return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop)) && ((compareRight <= viewRight) && (compareLeft >= viewLeft));
    else if (direction === 'vertical') return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop));
    else if (direction === 'horizontal') return !!clientSize && ((compareRight <= viewRight) && (compareLeft >= viewLeft));
};

})(jQuery);

但是,当我通过JS lint运行时,我收到一条错误,指出direction已经定义。我的语法在哪里错了?

(该剧本仍有效)

2 个答案:

答案 0 :(得分:4)

direction是您在var direction函数内定义的参数名称​​和

如果您将上一行的逗号更改为分号,即使direction = ...不是var语句的一部分,那么您将没事。

答案 1 :(得分:1)

因为方向已经是你功能的一个参数。然后在var语句中再次声明它。尝试:

[...]
clientSize = hidden === true ? t.offsetWidth * t.offsetHeight : true;
direction = (direction) ? direction : 'both';
[...]
例如,

。 (更改了,为a;),这将使方向行成为一个新的断言语句,而不使用var关键字。

b.t.w。

你的方向断言这样的陈述可以缩短为:

direction = direction || 'both';

如果方向未定义或任何其他假值,这将导致“两个”指向方向。