迭代与迭代器
时间:2016-06-19 18:37:26
收藏:0
阅读:246
迭代器推演
1. 一般函数
var func = function(){
console.log("func执行了");
return 123;
}
console.log(func()); //函数返回值123;
console.log(func); //返回的是func的地址2. 传参函数
var func = function(a){
console.log("func执行了,收到参数:",a);
return 123;
}
console.log(func(1)); //函数返回值123;3. 尝试用for来让函数循环执行
var func = function(a){
console.log("func执行了,收到参数:",a);
return 123;
}
for(i=1;10;1){
var v = func(i);
console.log(v);
} //将执行语句移动到循环语句内4. 改动一下for循环:迭代
var func = function(a){
console.log("func执行了,收到参数:",a);
return 123;
}
//v是func函数返回值,可以有多个返回值,但是只会返回第一个
for(v in func){ //func()的()要删掉,不然报错
console.log(v);
} //这里会循环执行不会停!5.指定第一次执行参数
var func = function(a){
console.log("owner:",owner)
console.log("func执行了,收到参数:",a);
console.more(1);
return 123;
}
//1:owner参数,2才是第一个调用参数
for(v in func,1,2){ //onwer参数一般用不到可以留空省略
console.log(v);
}
//这里也会不停的执行运行一下可看到第一次收到参数是2,第二次开始的参数就是前一次func函数返回值123。
6. 让迭代器返回null来结束循环
var func = function(a){
console.log("func执行了,收到参数:",a);
a++;
if(a<=10){
return a;
}
else{
return null;
}
}
for(v in func,,1){ //这里的()要删掉,不然报错
console.log(v);
}7. 再用一个函数表示func,,1
var iter = function(){
return func,,1;
}
for(v in iter()){ //这里需要(),细细体会!!!
console.log(v);
}8. 函数名也是一个变量,把func放到iter里面:
var iter = function(){
var func = function(a){
console.log("func执行了,收到参数:",a);
a++;
if(a<=10){
return a;
}
else{
return null;
}
}
return func,,1;
}
for(v in iter()){
console.log(v);
}9. iter是一个函数,可以接收变量,这里把迭代器for循环次数改为变量
var iter = function(len){
var func = function(a){
console.log("func执行了,收到参数:",a);
a++;
if(a<=len){
return a;
}
else{
return null;
}
}
return func,,1;
}
for(v in iter(15)){
console.log(v);
}10. 再优化,把循环初始值也改成变量
var iter = function(i,len){
var func = function(a){ //a是迭代器的控制变量
console.log("func执行了,收到参数:",a);
a++;
if(a<=len){
return a;
}
else{
return null;
}
}
return func,,i;
}
//创建迭代器的函数(生成器)
for(v in iter(2,15)){
console.log(v);
}总结:迭代器分离了业务和逻辑的代码,实现代码模块化,降低代码耦合度。
一个函数,调用函数,会返回函数内部的功能实现。函数的return则是得到返回值,是函数执行后的值,直接输出函数,是函数对象本身的内存地址。使用变量的时候,尽可能的使用局部变量,因为局部变量作用域受限,所以速度会快一些。
迭代:
函数中包函数,把上一次执行这个函数的返回值作为输入。即总是把上一次取得的成果,作为下一次执行的参数,或者是下一次执行的成本。这就是一个循环取值并不断逼近目标的工作。用于做迭代的函数,叫做迭代器。
在迭代器内的函数,放的是函数本身,上一次执行的结果,是下一次的参数,那么第一次执行的时候,参数是什么呢?。如果要给这个函数传参,要求在函数后面用逗号隔开,然后每个参数一个逗号。但是,第一个参数,是内函数的owner,代表外面的迭代器要调用哪个函数。所以,第一个参数是owner参数,一般可以不写。“func,,2,3”
当一次迭代过程中,func中return的是一个null,则停止迭代。控制迭代参数
迭代器可以在函数间传递交换代码控制权,分离代码逻辑,便于更好的模块化代码。
迭代器的生成器的函数名一般以‘each’开始,例如com.each()/table.eachName/process.each()/string.gmatch()
本文出自 “一夜一关” 博客,谢绝转载!
原文:http://ifedora.blog.51cto.com/740769/1790772
评论(0)