JavaScript中的匿名函数

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

 

posted @ 2016-02-15 16:29  咕-咚  阅读(167)  评论(0编辑  收藏  举报