先说javascript匿名函数吧:
javascript匿名函数的创建形式:
1、var double = function(x){ return 2*x }(2) //创建函数完毕之后又把函数付给变量double 2、(function(x,y){ alert(x+y) })(2,3) //第一括号中创建了一个匿名函数,第二括号传入两个参数,调用该匿名函数 3、function(x,y){ alert(x,y); }(2,3) //省略了前面的括号
在创建闭包的时候,常常会用到匿名函数,除此之外,匿名函数还可以用于构建命名空间,减少全局变量的使用。
闭包,可以说是函数的嵌套,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕;
看看代码:
通过全局变量mEven来调用两个局部变量,减少了全局变量的使用。
局部变量one外部不可以访问,但是可以被inner函数访问,将inner函数指向了outer,那么调用outer,outer 每次递增
闭包允许内层函数引用父函数的变量,但是该变量是最终值
var ps = document.getElementsByTagName("P"); for(var i=0;i<ps.length;i++){ function(){ ps[i].onclick = function(){ lert(i); } } } 始终弹出最后一个索引
可以这样写:
var ps = document.getElementsByTagName("P"); //以参数的形式传递 /*for(var i=0;i<ps.length;i++){ (function(arg){ ps[i].onclick = function(){ alert("arg"+arg); } })(i); }*/ //以局部变量的形式传递 for(var i=0;i<ps.length;i++){ (function(){ var temp = i; ps[i].onclick = function(){ alert("temp "+temp); } })(); }