(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();
希望各位大师帮我能解释的详细点,这块真的好模糊,在这提前谢谢了。
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();
希望各位大师帮我能解释的详细点,这块真的好模糊,在这提前谢谢了。
<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);//报错
第二个问题,这种写法叫做闭包函数,一个页面可以用多个,数量没什么限制
如果没关系的话,它在外部怎么不能直接通过f1()去访问,但通过obj.f()就可以访问了,难道obj的作用域和f1的作用域不一样吗?能帮我再解释详细点吗?谢谢了!
(function(){
obj = {f:f1};
function f1(){
alert("728");
}
})()
obj.f();
而f1是局部变量,外面当然访问不到咯function f1(){...}这是函数声明,跟变量声明var f1,这两个都是显式声明,作用域都在函数范围内
obj没有var就是隐式声明,作用域在全局范围