js代码定义变量使用效率比较(代码如下)

for(var i=0;i<arr1.length;i++){//遍历T,arr中大于1的数组,小于1的数组,以及元素统计
                var T = arr1[i];
                var countGoal = 0;//假如是目标数字
                var sumGoal = 0;//目标区域像素和
                var sumBack = 0;//背景区域像素和
                for(var j=0;j<arr.length;j++){
                    if(arr[j]>T){
                        sumGoal += arr[j];
                        countGoal++;
                    }else{
                        sumBack += arr[j];
                    }
                }
                /*前景的像素点数占整幅图像的比例记为ω0*/
                w0 = countGoal/arr.length;
                /*背景像素点数占整幅图像的比例为ω1*/
                w1 = (arr.length-countGoal)/arr.length;
                /*前景(即目标)和背景平均灰度μ0*/
                u0 = sumGoal/countGoal;
                u1 = sumBack/(arr.length-countGoal);
                arrG[i]= w0*w1(u0-u1)*(u0-u1);
            }

编程中突然想到这个问题:在for循环中,比如定义的T 、countGoal 、sumGoal 、sumBack 因为要根据下一个for循环改变其值,所以,定义了多次。后面的w0,w1,u0,u1也是类似以上变量需要改变多次,我采用另外一种在for外面定义方式,里面只是不断通过赋值改变上一次它的值,这两种方式哪种效率高?两种方式各有什么优缺点?希望有大神给点想法。

阅读 3.4k
2 个回答

2种定义都是相当于只定义了一次,因为JS会对变量的定义进行提升。楼主可以去搜索一下变量提升hoist

但是,虽然原则上两种都是只定义了一次,但效率却是不同的。因为JS是解释型的语言,一段被重复执行的代码(例如循环),在算法相同的情况下,代码越短,其运行效率越高。这也是为什么很多时候要把写好的JS代码用工具进行压缩的原因。这些压缩工具在压缩代码时,一个重要的手段就是缩短变量名(例如把局部变量全部替换为单字符的名称)


补充回答:
比如有以下代码:

var arr = [1,2,3];
// 这样的话a和b改变任何一个都会影响另一个
var a = arr;
var b = arr;

// 如果非要让a和b的内容相同,又互不影响,可以这样
var a = arr;
var b = [];
for (var i = 0; i < a.length; i++) {
    b[i] = a[i];
}

上面的代码可以处理数组,其他对象需要用不同的方法。楼主可以搜索以下对象拷贝深拷贝相关的文章

虽然我也不知道原因,但是我简单的测试了一下,发现其实是否在循环内多次定义所花的时间多少并没有规律,楼主可以通过通过修改times更改执行次数来查看执行的时间测试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题