JavaScript中的匿名函数
所谓不去污染全局命名空间,是因为 IIFE 创建了一个新的函数作用域,你真正的业务代码被封装在其中,自然就不会触碰到全局对象了。如果你需要全局对象
var index=100; //什么叫不会污染到全局的 function en(){ alert(this.index); alert('ss'); //所谓的不会污染到全局 } (function (){ window.en(); //当前这个匿名函数 没办法添加到window 和 global上去滴呀 })();
笔记一:
function checkClosure(){ var str="str"; setTimeout(function (){ alert(str); //内部函数可以使用外部函数额所有变量; },1000) } checkClosure(); //当内部函数执行完毕,并没有马上释放变量,因为,str被另外一
匿名函数的使用一
function forTimeout(x,y){ alert(x+y); } function delay(x,y,time){ setTimeout('forTimeout('+x+','+y+')',time) } //delay(10,20,1000); //代码优化之路一 使用匿名函数 function delay2(x,y,time){ setTimeout(function (){ forTimeout(x,y); },time) }
匿名函数最的用途是创建闭包滴呀,而且还可以创建命名空间,减少全局变量的使用
var obj={}; (function (){ var addEvent=function (){ alert('s');}; function removeEvent(){}; obj.addEvent=addEvent; //把局部变量当成全局变量来使用; obj.removeEvent=removeEvent; //但又不污染全局 })();//它会立即执行 //addEvent 和 removeEvent 都是局部变量,但是我们可以通过全局变量obj //使用它,这样大大的减少了全局变量的使用,增强了网页的安全性 obj.addEvent(); // 这是这样来使用滴呀 //也可以把它添加到window对象滴呀;
给函数初始化值:
var showInfo=(function(x,y){ console.log(x+y); })(2,3); var showInfo=function(x,y){ console.log(x+y); }(2,3); //ps:............ //直接这样写是不可以的 function (j){ alert(j); }(10); var x=function (j){ alert(j); }(10); //或者: (function (j){ alert(j); })(10);
实例五:
var outer=null; (function (){ var one=1; function inner(){ one+=1; alert(one); } outer=inner; //这样我们inner 就被全局变量引用了, //outer不释放,那么... })(); outer(); //2 outer(); //3 outer(); //4