想象一下,我有这段代码(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连接语法不友好。
答案 0 :(得分:5)
在这种情况下,是的,要记录,这个神奇的条件意味着什么:
bool wrapInTimeout = i > 1;
请勿将其称为higherThanOne
。这将是一个无益的名字。
根据变量的代码命名变量,而不是根据它们的计算方式。
答案 1 :(得分:1)
在你的情况下比较非常简单,所以我没有看到使用临时变量的任何优点,但是,如果你有更多相同的比较那么你可能想要使用该变量,因为它简化了代码结构和可读性。
另外我注意到,如果每次都调用相同的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>