0

假设我有这个:

$(obj).attr("style","...top:"+________)

现在假设top计算:

(o.outerHeight(true)>=30?o.outerHeight(true)+'px':'-5px')

我的问题是重复o.outerHeight(true)

为简单起见:我知道我通常可以做到:

((a=5)>2?a:-1) //5--注意a' 的计算没有重复。

但这会创建一个全局a变量。(我不想那样做)

window.a //5

我试过了 :

((var a=5)>2?a:-1)*//错误:意外的令牌变量

有什么办法(除了声明我自己的var)来避免这种重复吗?

4

2 回答 2

5

您可以使用iife

(function(value) { return complex_expression_using_value; }(some_expression))

这样,您创建了一个正式的函数参数而不是一个 var。没有命名空间污染。

要将其应用于您的特定示例:

var top = (function(value) {
        return (value >= 30 ? value : -5) + 'px';
    }(o.outerHeight(true)));

或者,您可以将 iife 用作另一个表达式的一部分:

$(obj).attr("style","...top:"+
    (function(value) {
            return (value >= 30 ? value : -5) + 'px';
        }(o.outerHeight(true)))
)
于 2013-04-17T07:00:32.900 回答
2

不,sincevar a是一个语句,根据语言语法,条件(三元)运算符只能将表达式作为其操作数:

ConditionalExpression :
    LogicalORExpression
    LogicalORExpressionAssignmentExpressionAssignmentExpression ? _ : _

您必须事先声明变量。

于 2013-04-17T06:58:57.077 回答