假设我有以下代码(Razor语法):
<script type="text/javascript">
@{
    var i = 0;
    foreach (var notify in @Model)
    {
        if (i > 1) // <------ First comparison 
        {
            <text>setTimeout(function() {</text>
        }
        <text>
        // JavaScript
        </text>
        if (i > 1) // <------  Second same comparison
        {
            <text>}, 1000 * @i);</text>
        }
        i++;
    }
}
</script>注意,对int i进行了两次比较。首先对局部变量进行比较,然后检查它的值,还是进行第二个简单的比较,这样做更好吗?如下所示:
<script type="text/javascript">
@{
    var i = 0;
    foreach (var notify in @Model)
    {
        bool higherThanOne = i > 1;
        if (higherThanOne)
        {
            <text>setTimeout(function() {</text>
        }
        <text>
        // JavaScript
        </text>
        if (higherThanOne)
        {
            <text>}, 1000 * @i);</text>
        }
        i++;
    }
}
</script>我多次遇到类似的情况,我不知道什么更好。由于不友好的Razor + JavaScript级联语法,我希望避免将代码分配给变量。
发布于 2014-07-05 15:03:58
在这种情况下,是的,为了记录,这个神奇的条件意味着什么:
bool wrapInTimeout = i > 1;别叫它higherThanOne。那将是一个无益的名字。
根据变量所代表的内容命名变量,而不是根据它们的计算方式命名。
发布于 2014-07-05 14:51:04
在您的情况下,比较非常简单,所以我不认为使用临时变量有任何好处,但是,如果您确实有更多相同的比较,那么您可能希望使用该变量,因为它简化了代码结构和可读性。
我还注意到,如果每次调用相同的javascript函数,实际上可以将这两个条件组合为一个:
<script type="text/javascript">
@{
    var i = 0;
    foreach (var notify in @Model)
    {
        if (i > 1) // <------ First comparison 
        {
            <text>setTimeout(myFunction, 1000 * @i);</text>
        }
        i++;
    }
    <text>function myFunction(){ //your code here, if the same for all models }</text>
}
</script>https://stackoverflow.com/questions/24587532
复制相似问题