问题1:
var ti= function(){
                .....}();
function最后的();时什么意思??问题2:
var ti=function(){..}和 function td(){。。} ;var ti= new td();有什么区别吗,
问题3:
var ti=function(){
   this.i="0";
}
alert(ti.i);报错了,为啥啊!

解决方案 »

  1.   

    var ti= function(){}();
    相当于 function x(){}; ti=x(); 定义函数并立即调用
    ------------
    与var ti=function(){}关系不大, 这样写是定义了函数句柄。
    如果是 var ti= function(){}();的话, 同var ti= td();
    -------------
    此时this并不是指类的实例
    var ti= new function(){
      this.i="0";
    }()
    alert(ti.i);
      

  2.   

    问题1:
    var ti= function(){
            return "text";
    }();
    等同于
    function fn(){
       return "text";
    }vat ti = fn();问题2:
    没看懂什么意思问题3:
    var ti=function(){
      this.i="0";
    }
    你只是声明了一个函数,并有没执行,肯定会报错啊,你new一下函数
    var ti = new function(){
      this.i="0";
    }
    alert(ti.i);就正常了
      

  3.   

    回楼上,是这样的,我现在在看一个js特效的源码,我记得js创建对象只有两个方法:
    1:json var j={i:0,...}
    2:构造函数 function ds(){...},var j= new ds();
    可是这个源码里老是这样定义对象 var j= function(){}();我模仿这个写法自己写个小的测试却老是报错,最后我想后面的();可能就是要函数执行,
    就改成 var j= function(){},可还是报错,现在明白了要写成var j=new function(){..},等于时第二种方法,只是函数匿名简写了。理解应该没错了把?
    很感谢楼主同志帮忙,不过还有两个问题无耻的问下:
    1、
    j=function(){
           .....
           return{
             js:function(){
                      .....
            }这种写法是不是要函数返回一个对象啊,在函数j外面能通过j.js调用吗?这种写法用什么讲究吗?2、var j=functon(){..},此时的j是什么呢,能通过 var l= new j()调用吗?不太理解啊
      

  4.   

    1,var j=function(){
      .....
      return{
      js:function(){
      .....
      }()调用j.js()2,j就是函数function(){..}, 能通过var l= new j();调用
      

  5.   

    问题1:
    var ti= function(){
      .....}();
    function最后的();时什么意思?? //直接执行该函数 如果函数有返回值 变量ti将得到该返回值
    问题2:
    var ti=function(){..}和 function td(){。。} ;var ti= new td();有什么区别吗,
    /*****start****/
    var ti=function(){..} 
    function td(){。。} //这是定义一个函数的两种写法var ti = new td(); //这是定义对象的方式 因为function也是对象 所以可以这么来写   
    /*****start****/问题3:
    var ti=function(){
      this.i="0";
    }
    alert(ti.i);报错了,为啥啊!你这么写是没有问题的 报错是因为你的大括号的字体不是英文字体导致的
    你要想获得i 要new ti().i 才可以得到
      

  6.   

    var j=function(){
      .....
      return{
      js:function(){
      .....
      }
    }()我们给函数加个名字,效果是一样的var j=function fn(){
      .....
      return{
      js:function(){
      .....
      }
    }()我们一步一步看,外面的()其实就是执行了fn函数,也就是return 了
    {
      js:function(){
      .....
      }
    因此等价于var j = {
      js:function(){
      .....
      }而他为什么要这样写呢,是因为看例子
    var j=function fn(){
      var str = "abc";
      return{
      js:function(){
         alert(str)
      }
    }()str作为fn函数的私有变量在fn函数中保存起来,其实他等价于var str = "abc";
    var j = {js:function(){alert(str)}};但为什么要用闭包写呢?
    因为全局变量是魔鬼,str是一个比较常用的命名如果我在代码里面写了var str = "abc";
    var j = {js:function(){alert(str)}};但其他人不知道我已经命名了str,在某个地方写了
    str = "111";
    那我后面调用j.js()弹出的并不是我需要的"abc",而是别人无意中给我赋值的"111";
    但我们将str作为私有变量保存到fn()函数中,别人在外面是无法访问与修改的,就杜绝了意外的发生。闭包很大的作用就在于此
      

  7.   

    回楼上,第二个测试通过了,确实可以,第一个我写了如下的测试代码:
    <script>
    var j= funtion(){
    return {
    jj:function(){
    alert(1);
    };
    }
    }();//();是出错后加上去的,不过结果一样,
    j.jj();
    </script> 
    结果时报错:
    missing ; before statement
    [在此错误处中断] var j= funtion(){ //firedebug出错信息;
    这是???
      

  8.   

    var j= funtion(){ // var j= function(){
    是functionreturn {
    jj:function(){
    alert(1);
    }; //这里多了个;
    }
      

  9.   

    强人,膜拜!!
    解释的很详细,加分结贴了,随便最后在问下能说下你js是怎么学的吗。我现在自学js就是在网上看文档和源代码,老是出现没见过的函数和用法,学的一点不系统,乱得很,呵呵,介绍下学习心得吧!好的话我帮你推广啊!
      

  10.   

    #1.function没拼对,你少了个c
    #2.多了个;,对象属性值分隔符是逗号,你加个;是语法错误
    return {
    jj:function(){
    alert(1);
    };//分号不能在这里加,去掉,或者换成个逗号在firefox下都没问题,ie就有问题
    }