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

いいえ、はステートメントであるため、条件付き (三項) 演算子は、言語の文法var aに従って、式のみをオペランドとして使用できます。

ConditionalExpression :
    LogicalOREexpression
    LogicalOREexpression ? 代入式 : 代入式

事前に変数を宣言する必要があります。

于 2013-04-17T06:58:57.077 に答える