zoukankan      html  css  js  c++  java
  • 对循环内部反复声明变量的写法的一点想法?

    之前看过一段代码,大概是是这样:

    function getVaildList(){
    	var _list = $('.list');
    	_list.each(function(item){
    		var listContent = $(this);
    		var listName = listContent.find('listName').text();
    		var aaa = aaa;
    		var bbb = bbb;  //假设还有很多
    		var ccc = ccc;
    		      . . .
    		      . . .
    		      . . .
             //dosomething  }); return XXX; }  

    咋看一下也没啥毛病,程序也能跑起来,但是看着看着我就纠结起来了,如果变量数量很多呢?在循环中不断声明变量,这样好么?

    仔细看上面的代码,其实我们不妨在函数的顶部先定义这些变量,这个的好处是什么呢?

    在each的函数内部反复声明变量,变量在当前函数使用完之后就被内存释放,然后再次创建一个,这样循环下去,就会使得内存有不必要的损耗,我们完全可以延长变量的生命周期,在函数的顶部然后每次去改变它的值即可。

    那么说到变量,就再说说局部变量和全局变量吧。

    大家都知道,在浏览器中大量使用全部变量有可能会使得全局污染,所以最好的是实现一种模块功能,两个模块之间各自定义变量,互不影响,最后模块之间再引用就可以了。这不正是nodeJs所采用的函数式编程的思想么?那么node怎么做到这一点的呢?

    其实node加载一个模块test.js之后,对所加载的模块改造一下:

    (function(){

       /***tese.js的内容

            各种变量

       ***/

      
    })()

    这不是我们很熟悉的立即执行函数么?本来在test.js的全局函变量不就现在变成了函数内部的局部变量了吗?这样就不能污染外面的变量了,最后node再向外界暴露想暴露的变量。

    其实在很多情况都使用了这用模式,比如单例模式等。

     

  • 相关阅读:
    [BZOJ5338][TJOI2018]xor(可持久化Trie)
    [BZOJ4592][SHOI2015]脑洞治疗仪(线段树)
    [BZOJ4571][SCOI2016]美味(贪心+主席树)
    [BZOJ4570][SCOI2016]妖怪(凸包)
    [BZOJ4569][SCOI2016]萌萌哒(倍增+并查集)
    [BZOJ4567][SCOI2016]背单词(Trie+贪心)
    [BZOJ4565][HAOI2016]字符合并(区间状压DP)
    [BZOJ4561][JLOI2016]圆的异或并(扫描线)
    [BZOJ2650]积木
    [清橙A1210]光棱坦克
  • 原文地址:https://www.cnblogs.com/leaf930814/p/6667058.html
Copyright © 2011-2022 走看看