对循环内部反复声明变量的写法的一点想法?

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

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再向外界暴露想暴露的变量。

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

时间: 2024-10-10 04:05:41

对循环内部反复声明变量的写法的一点想法?的相关文章

关于结构体声明的一些写法

关于结构体声明的一些写法:第一点:#include<stdio.h>struct square{ int (*add)(int a,int b);};int square_add(int a,int b){ return a + b;} int main(){ struct square stu={ .add=square_add, }; //与下面无区别 stu.add=square_add; return 0;} 第二点:位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一

[转]oracle存储过程、声明变量、for循环

oracle存储过程.声明变量.for循环 1.创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名 变量类型) begin --存储过程的执行体 end test; 打印出输入的时间信息 E.g: create or replace procedure test(workDate in Date) is begin dbms_output.putline(&ap

Java中循环声明变量方法

Java循环声明变量 之前想这样做,但是网上一直搜索不到,下面是我的方式 项目中 // 得到需要查询外表的数量,然后分别创建缓存,插入数据多的时候如果编码在缓存里面,就不需要再去查询数据库了.key:code/value:pk // 根据"数据来源"有多少非空的 就创建几个,使用 "数据来源字段"+Cache 当cacheMap的key Map<String, Map<String, String>> cacheMap =new HashMa

oracle存储过程、声明变量、for循环|转|

oracle存储过程.声明变量.for循环 1.创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名 变量类型) begin --存储过程的执行体 end test; 打印出输入的时间信息 E.g: create or replace procedure test(workDate in Date) is begin dbms_output.putline(&ap

oracle存储过程、声明变量、for循环

oracle存储过程.声明变量.for循环  1.创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名 变量类型) begin --存储过程的执行体 end test; 打印出输入的时间信息 E.g: create or replace procedure test(workDate in Date) is begin dbms_output.putline(&a

IOS OC声明变量在@interface括号中与使用@property的区别

方式一:直接在@interface中的大括号中声明. @interface MyTest : NSObject{ NSString *mystr; } 方式二:在@interface中声明,然后再在@property中声明. @interface MyTest : NSObject{ NSString *_mystr; } @property (strong, nonatomic) NSString *mystr; 随后在.m文件中加入 @synthesize mystr = _myStr; 方

ES6随笔--声明变量

ES6随笔--声明变量 let命令 所声明的变量只在其所处代码块内有效: {let a = 10}; alert(a); // ReferenceError: a is not defined {let a = 10; alert(a);} //10 在for循环中,for关键字后面跟的设置循环变量语句和后面循环体内部语句是父作用域和子作用域的关系: var arr = []; for (let i = 0; i < 5; i++) { arr[i] = function () { let i

es6 - 一共有 6 种声明变量的方法(var, function, let, const, class, import)

let声明的变量只在它所在的代码块有效. 不存在变量提升 let不允许在相同作用域内,重复声明同一个变量 暂时性死区,只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响, 定义之前不能使用. 应该避免在块级作用域内声明函数.如果确实需要,也应该写成函数表达式,而不是函数声明语句. for循环的计数器,就很合适使用let命令. for (let i = 0; i < 10; i++) {let i = 'abc';} // 变量i是let声明的,当

Python 2 声明变量 输入输出 + 练习

变量: 代指,用于将具体信息对应到一个值,便于反复使用时方便调用.例如  name = ("斯诺登")   变量声明规则:以字母开头的 字母数字下划线的组合.且不能是python代码已经被定义了的关键字 例如 print  if  while等等.   人为规则:变量名应该可读性高,便于理解,具有代表性.例如  name_me  name_your. 变量的声明逻辑:  例:name = ("ABC")     name是变量名   ABC是值.  name1 =