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