这是我写的一段代码,我的同事用另一种方式改变了我的代码,请问这两种方法是否具有相同的效率?我认为它们具有相同的效率。哪种更好?
我的功能
<script>
var $count = $("#count");
function(){
var i=0,j=0;k=0,count =0;
for(i;i<10;i++){
for(j;j<100;j++){
for(k;k<1000;k++){
$count.text(count++);
}
}
}
</script>
其他功能
<script>
var $count = $("#count");
function(){
var i=0,j=0;k=0,count =0,
tempCount= $count ;
for(i;i<10;i++){
for(j;j<100;j++){
for(k;k<1000;k++){
tempCount.text(count++);
}
}
}
</script>
答案 0 :(得分:4)
我能看到的唯一区别是他们将全局$count
变量分配给变量tempCount
,该变量是函数的本地变量。这为每次需要访问$count
时节省了一个步骤,因为没有tempCount
它将首先在本地范围内找不到$count
,然后继续检查全局范围。由于这种情况发生了很多次,我相信他们的代码应该更有效率。您始终可以使用console.time和console.timeEnd进行检查。
有关JavaScript范围的更多信息,请参阅this question。
编辑在测试时,似乎此示例中的两个函数显示的性能基本相同,至少在更正for循环以重置j
和{{1 }为零,导致1000000个周期而不是1000个(见注释)。
但是,我仍然建议,一般来说,优先选择局部变量或全局导入而不是隐含全局变量,以获得清晰度,如果不是性能的话。你可以看到this article的“全球导入”部分,以解释我的意思。