我在学习EXT的官方例子时,学习到一种比较特殊的用法——也许是小弟少见多怪,但是因为不能理解其用法,所以请教一下大家JSP页面
<html>
<head>
..............................................................
<script type="text/javascript" src="test.js"></script>
<script type="text/javascript">
Ext.onReady(webLayOut.app.init,webLayOut.app);
</script>
</head>    
<body>
</body>
</html>test.js页面
Ext.NameSpace(webLayOut);
webLayOut.app=function(){
var strTest
.................
return{
init: function(){}
};
}();注意webLayOut.app=function(){}() 这种写法,经过我的研究,它的执行过程是这样的1、当浏览器执行时,当引用JS页面时,会先运行js页面部份webLayOut.app的return之前的部分,也就是说,此部分代码在js页面被引用时就执行了。因为return之前的代码在html页面的body之前被执行,所以此时不能访问dom对象2、浏览继续执行JSP页面的其他部分,然后,执行到Ext.onReady()的时候,不会立即执行webLayOut.app Return之后的内容,直到JSP页面其余所有部分,即body部分执行完,浏览器才执行Ext.onReady()里的内容,所以Return后面的代码部分可以访问DOM对象。我总结这样写有几个好处
(1)jS部分代码结构明晰,return之前的部分作为私有变量和函数部分的申明,可以被return之后的部分调用;
(2)return之后的部分之有调用是才会被执行,不调用则不执行——好像是个回调函数,这样提高执行效率;以上是我不成熟的总结,也许这种官方的写法有更高明的地方还没有被我发现,现在我只是抄袭这种写法。但是我对function(){}()这种写法感觉“怪怪”的,webLayOut.app=function(){} 是返回了一个函数,再加上一个“()”是什么意思呢?请高手指教

解决方案 »

  1.   

    立即执行前面的匿名函数.
    webLayOut.app=function(){ 
    var strTest 
    ................. 
    return{ 
    init: function(){} 
    }; 
    }(); 
    这里就等于webLayOut.app={init: function(){} }
    但是他拥有闭包中的strTest变量.
      

  2.   

    就想到与
    function func(){alert("run now!");}
    func();
      

  3.   

    我遇到的情况是这么用query(sid,queryParam,function(){}); 我并不知道这个函数吧结果传递到哪里去了!结果会怎么样啊?