(function(){
obj = {f:f1};
function f1(){
alert("728");
}
})()
obj.f();
//f1();
//问题一:为什么用obj.f()就可以访问f1()函数,用f1直接就访问不了?
//问题二:(function(){})()这种格式在页面中最多允许出现几个,为什么?

(function(){
//var obj = f1; 问题三:为什么这样写访问不到f1(),去掉var就又可以了.
obj = f1;
function f1(){
alert("728");
}
})()
obj();
希望各位大师帮我能解释的详细点,这块真的好模糊,在这提前谢谢了。

解决方案 »

  1.   

    第一个问题和第三个问题都是作用域的问题加上var就是一个局部变量,不加var就是一个全局变量
    <script>
    (function(){ 
    var f1 = function (){ //加var等价于LZ的写法
    //f1 = function (){//不加var才是全局变量,下面的obj同理
    alert("728"); 
    };
    obj = {f:f1}; 
    })() 
    obj.f(); 
    f1();
    </script>
    再给个例子
    function aaa(){
    var a = "a";
    b = "b";
    }aaa();//执行aaa函数
    alert(b);//b
    alert(a);//报错
    第二个问题,这种写法叫做闭包函数,一个页面可以用多个,数量没什么限制
      

  2.   

    //问题二:(function(){})()这种格式在页面中最多允许出现几个,为什么?没限定吧,匿名函数有几个都行。
      

  3.   

    先谢谢2楼的朋友了,不过这个内部的f1()函数在外部不能访问是不是与它用function修饰有关系呀?
    如果没关系的话,它在外部怎么不能直接通过f1()去访问,但通过obj.f()就可以访问了,难道obj的作用域和f1的作用域不一样吗?能帮我再解释详细点吗?谢谢了!
         (function(){ 
               obj = {f:f1}; 
               function f1(){ 
               alert("728"); 
               } 
         })() 
         obj.f(); 
      

  4.   

    你没有var所以obj就成了全局变量,所以外面也能访问到
    而f1是局部变量,外面当然访问不到咯function f1(){...}这是函数声明,跟变量声明var f1,这两个都是显式声明,作用域都在函数范围内
    obj没有var就是隐式声明,作用域在全局范围