(function(){
    var x1=0;
    var b1=0;    point=function(x,y)
    {
        this.x=x||x1;
        this.y=y||b1;
    }
})();这是啥意思?这样定义有什么用?和直接定义这么一个函数有什么区别?初学者,求稍详细的解释

解决方案 »

  1.   

    匿名函数。
    http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html
      

  2.   

    闭包: 闭包的内部环境对外部不可见,对外封闭
    Javascript 闭包是通过function实现的,所以它具有函数的基本特征,在闭包里声明的变量,闭包外的环境无法访问,除非它提供对外接口
      

  3.   

    <script>
    <!--
    function dwn(s)
    {
    document.write(s + "<br/>");
    }
    //我们说匿名函数调用产生一个"瞬时"的闭包
    //因此当调用结束后,私有变量无法访问,并且如果没有外部引用存在
    //内部对象就会被销毁
    //而如果返回了函数,或者被全局引用,则"闭包"被保留了下来
    //闭包中的内容被"有选择"地开放出来
    (function(){
    //封闭的私有域
    var innerX = 10, innerY = 20; //开放的公共域
    outerObj = {x : innerX, y : innerY} ;
    })();try{
    dwn(innerX); //内部数据无法访问
    }
    catch(ex){
    dwn("内部数据无法访问");
    }
    dwn(outerObj.x); //通过外部接口访问
    -->
    </script>
      

  4.   

    (function(){ 
            var   x1=0; 
            var   b1=0;         point=function(x,y) 
            { 
                    this.x=x||x1; 
                    this.y=y||b1; 
            } 
    })(); 
    我来解释一下,我看楼上的都童鞋都不是很贴近主题,
    1. 首先说一下最外层的小括号,和后面跟着的小括号的意思:就是执行里面这个自定义的匿名函数,例如
         (function(n){
          alert(n) 
          })(1)
    这个例子放在html里面的话就会直接弹出alert(1)2. 这里说一下 point=function(x,y) 
            { 
                    this.x=x||x1; 
                    this.y=y||b1; 
            } 这个代表的意思,
        (1)  首先 point 前面没有加var 表示point是全局变量,
        (2)  指定定义函数 和赋值定义函数是有区别的,例如
              function point(x,y){...} 这个是有区别的,js会先定义变量,在计算,就是说在一个作用域内(通常是一个函数内)js会先把所有需要定义的变量定义,然后在顺序执行运算,也就是说在一个js函数里面,无论你的定义变量的代码放在哪里,都没有影响.3.  这里要说的就是楼上也由提到的闭包,闭包是一个博大精深的js理念,这里我不多说了,楼主想研究闭包可以自己google,这里我就说一下楼主贴出来的代码,
        在这段js里面point函数是没有全力操作x1和b1的,相对point来说 这两个变量和全局变量没区别,但是,注意,只是相对于point来说的,他们的访问权限只是限制于外围的这个匿名的函数,当然包括point,这个匿名函数外部是没有权限访问的,着就巧妙的实现了一种变量作用域权限的控制,当我们想实现全局变量的效果,但是又不想定义全局变量时,(全局变量当然是尽量慎用了,不安全),闭包(也就是类似于上面这种用法,只是类似)就是很好的一种实现.最后解释一下这个代码的意思:将point全部变量赋值,变成一个函数,这个函数的作用是如果调用point时没有传进来参数,就用x1,和b1来初始化这个匿名函数的成员变量x和y,解释一下,在一个函数内用this.xxx就是定义了一个相对于这个函数的成员变量,
    纯手打.
      

  5.   

    (function(){  
      var x1=0;  
      var b1=0;    point=function(x,y)  
      {  
      this.x=x||x1;  
      this.y=y||b1;  
      }  
    })();  
    我来解释一下,我看楼上的都童鞋都不是很贴近主题,
    1. 首先说一下最外层的小括号,和后面跟着的小括号的意思:就是执行里面这个自定义的匿名函数,例如
      (function(n){
      alert(n)  
      })(1)
    这个例子放在html里面的话就会直接弹出alert(1)2. 这里说一下 point=function(x,y)  
      {  
      this.x=x||x1;  
      this.y=y||b1;  
      } 这个代表的意思,
      (1) 首先 point 前面没有加var 表示point是全局变量,
      (2) 指定定义函数 和赋值定义函数是有区别的,例如
      function point(x,y){...} 这个是有区别的,js会先定义变量,在计算,就是说在一个作用域内(通常是一个函数内)js会先把所有需要定义的变量定义,然后在顺序执行运算,也就是说在一个js函数里面,无论你的定义变量的代码放在哪里,都没有影响.3. 这里要说的就是楼上也由提到的闭包,闭包是一个博大精深的js理念,这里我不多说了,楼主想研究闭包可以自己google,这里我就说一下楼主贴出来的代码,
      在这段js里面相对point来说 这两个变量和全局变量没区别,但是,注意,只是相对于point来说的,他们的访问权限只是限制于外围的这个匿名的函数,当然包括point,这个匿名函数外部是没有权限访问的,这就巧妙的实现了一种变量作用域权限的控制,当我们想实现全局变量的效果,但是又不想定义全局变量时,(全局变量当然是尽量慎用了,不安全),闭包(也就是类似于上面这种用法,只是类似)就是很好的一种实现.最后解释一下这个代码的意思:将point全部变量赋值,变成一个函数,这个函数的作用是如果调用point时没有传进来参数,就用x1,和b1来初始化这个匿名函数的成员变量x和y,解释一下,在一个函数内用this.xxx就是定义了一个相对于这个函数的成员变量,这里x1,和b1 外部是没有权限修改, 就实现了默认初始化参数的效果,
     并且这段代码是自动执行了 原因在第一点里 我已经说明了 不明白也可在回复
    上面是刚才没打完 点错了.sorry
    纯手打.
      

  6.   

    (function(){ 
            var   x1=0; 
            var   b1=0;         point=function(x,y) 
            { 
                    this.x=x||x1; 
                    this.y=y||b1; 
            } 
    })(); 
    在内部调用时候 比如 var abc=new point()  初始化  abc.x=0,abc.y=0
    再如
    var def=new point(2,3)    则  def.x=2  def.y=3需要注意的是  point 再跳出 })(); 后 无效