标签:迭代
var func = function(){ console.log("func执行了"); return 123; } console.log(func()); //函数返回值123; console.log(func); //返回的是func的地址
var func = function(a){ console.log("func执行了,收到参数:",a); return 123; } console.log(func(1)); //函数返回值123;
var func = function(a){ console.log("func执行了,收到参数:",a); return 123; } for(i=1;10;1){ var v = func(i); console.log(v); } //将执行语句移动到循环语句内
var func = function(a){ console.log("func执行了,收到参数:",a); return 123; } //v是func函数返回值,可以有多个返回值,但是只会返回第一个 for(v in func){ //func()的()要删掉,不然报错 console.log(v); } //这里会循环执行不会停!
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。
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); }
var iter = function(){ return func,,1; } for(v in iter()){ //这里需要(),细细体会!!! console.log(v); }
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); }
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); }
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