Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的JS代码之间有什么区别?_Javascript_Jquery - Fatal编程技术网

Javascript 我的JS代码之间有什么区别?

Javascript 我的JS代码之间有什么区别?,javascript,jquery,Javascript,Jquery,这是我写的一段代码,我的同事用另一种方式修改了我的代码,我能问一下这两种方法是否具有相同的效率吗?我认为它们具有相同的效率。哪个更好 我的功能 <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++){

这是我写的一段代码,我的同事用另一种方式修改了我的代码,我能问一下这两种方法是否具有相同的效率吗?我认为它们具有相同的效率。哪个更好

我的功能

<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>

var$count=$(“#count”);
函数(){
变量i=0,j=0;k=0,计数=0;

对于(i;i我能看到的唯一区别是,他们将全局
$count
变量分配给函数本地的变量
tempCount
。这为程序每次需要访问
$count
时节省了一个步骤,因为如果没有
tempCount
,它首先将无法在l中找到
$count
局部作用域,然后继续检查全局作用域。由于这种情况发生了很多次,我相信他们的代码应该更有效。您可以始终使用和来检查

有关JavaScript中作用域的更多信息,请参见


编辑:在测试时,本例中的两个函数似乎表现出基本相同的性能,至少当for循环被纠正为将
j
k
重置为零,导致1000000个循环而不是1000个循环时(见注释)


然而,我仍然建议,一般来说,与隐含的全局变量相比,更倾向于局部变量或全局导入是一种良好的做法,因为如果不是为了性能,那么它更清晰;您可以看到“全局导入”我能看到的唯一区别是,他们将全局
$count
变量分配给变量
tempCount
,该变量是函数的本地变量。这为程序每次需要访问
$count
时节省了一个步骤,因为没有
tempCount
,它将首先在本地作用域中找不到
$count
,然后继续检查全局作用域。由于这种情况经常发生,我相信他们的代码应该更有效。您可以始终使用和进行检查

有关JavaScript中作用域的更多信息,请参见


编辑:在测试时,本例中的两个函数似乎表现出基本相同的性能,至少当for循环被纠正为将
j
k
重置为零,导致1000000个循环而不是1000个循环时(见注释)



然而,我仍然建议,一般来说,与隐含的全局变量相比,更倾向于局部变量或全局导入是一种良好的做法,因为如果不是为了性能,那么它更清晰;您可以看到“全局导入”请参阅的第节以解释我的意思。

使用
tempCount
var不应该对性能产生影响,它们都存储对同一事物的引用。@iStimple,但这两个函数都不会更改循环中
$count
的值?您的同事怎么说?@iStimple,为什么在函数中使用本地var tempCountn通常更快?@KevinB,我同意你的看法。我认为它们也有同样的效率。使用
tempCount
var不应该对性能造成影响,它们都存储对同一事物的引用。@iStimple,但这两个函数都不会更改循环中
$count
的值。你的同事说了什么?@iStimple,为什么在函数中使用一个本地变量tempcount通常更快?@KevinB,我同意你的观点。我认为它们也有同样的效率。但是@Kevin B说使用tempcount变量不会对性能产生影响,它们都存储对同一事物的引用。奇怪的是,所有循环每次都从零开始,但内部循环只是运行到10和100(否则测试运行时间太长),表明它甚至可能会稍微慢一点,@flower@flower,至于jsPerf,这些也可能是测试中的小错误(我们的计算机正忙于做其他事情;测量中有一些随机错误)。运行完整循环时(并确保jQuery初始化不会影响任何事情),我得到
第一个函数:20785.523ms
第二个函数:21033.110ms
(有时情况正好相反:我猜这在这个特定的情况下并不重要,尽管在其他情况下它肯定会重要。它只对嵌套循环重要,对于
j
k
。因此重置它们,使它们在
i=0..9
中每次实际运行100次和1000次,只需运行更多的循环即可。)也许这会减少随机差异对结果的影响?顺便说一句,@flower and Sean,David Herman在他的“高效JavaScript”(非常好的阅读)中写道:“[…]JavaScript函数值包含的信息不仅仅是调用它们时执行所需的代码。它们还在内部存储它们可能引用的、在其封闭范围内定义的任何变量。”因此,考虑到测试结果,我仍然倾向于认为在本例中使用函数变量并不能提高性能。但我不确定引用是否也适用于s。但是@Kevin B说使用tempCount变量不会对性能产生影响,它们都存储对同一事物的引用。奇怪的是,所有循环都以每次都为0,但内部循环仅运行到10和100(否则测试运行时间太长),这表明它甚至可能会稍微慢一点,@flower@flower,至于jsPerf,这些也可能是测试中的小错误(我们的计算机正忙于做其他事情;测量中有一些随机错误)。运行完整循环时(并确保jQuery初始化不会影响任何事情),我得到
第一个函数:20785.523ms
第二个函数:21033.110ms
(有时情况正好相反:我猜这在这个特定的情况下并不重要,但在其他情况下肯定会重要。它只对嵌套循环重要,对于
j
k
。因此重置它们,使它们在
i=0..9