有没有人见过这样的js代码的:
(function(){})()
原代码(1)
var result = (function(x){  
     if(x <=1) return 1;  
     return x* arguments.callee(x-1);  
})(3);原代码(2)
(function(){
var Y = YAHOO.util,
D = Y.Dom,
E = Y.Event;/*
var pageConfig = {};
if ($_GET['inviteUserId']){
pageConfig.inviteUser = $_GET['inviteUserId'];
}
*/
TB.namespace('TB.ACT'); var API_prefix = 'http://promotion.taobao.com/sevenyears/';
TB.ACT.API={
addUser : API_prefix+'addUser.do?varname=addUserAction',
getUser : API_prefix+'getUser.do?varname=currentUser',
getMessages : API_prefix+'getMessages.do?varname=msgList',
addMessage : API_prefix+'addMessage.do?varname=addMessage',
getPlantTreesList : API_prefix+'getPlantTreesList.do?varname=plantTreeList',
getCounts : API_prefix+'getCounts.do?varname=counts'
};
TB.ACT.Cache = {}; TB.ACT.LogAction = new Y.CustomEvent();
TB.ACT.LogAction.subscribe(function(){
if (TB.ACT.Cache.hasLogin){
D.setStyle('J_AddMsg','display','block');
D.setStyle('J_NoMsg','display','none');
}else{
D.setStyle('J_AddMsg','display','none');
D.setStyle('J_NoMsg','display','block');
D.setStyle('J_MyMsg','display','none');
}
}); var AddFavorite = function(ev){
        E.stopEvent(ev);
var sURL = location.href,
sTitle = document.title;
try {
window.external.addFavorite(sURL, sTitle);
}
catch (e) {
try {
window.sidebar.addPanel(sTitle, sURL, "");
}
catch (e) {
alert("加入收藏失败,请手动添加。");
}
}
}; TB.ACT.Msg = {
currentPage:1,
currentList:'all',
getList : function(){
var url = TB.ACT.API.getMessages;
url+='&user='+this.currentList+'&currentPage='+this.currentPage+'&pageSize=5';
Y.Get.script(url,{
onSuccess:function(){
if (typeof msgList === 'undefined'){
return;
}
if (msgList.success === 'true'){
TB.ACT.Msg.buildList(msgList.query,msgList.list);
}
},
                                 charset:'GBK'
})
},
buildList : function(page,list){
var html = [],prevShrink,nextShrink,startP,endP;
var writepage = function(p){
return '<li'+(page.currentPage==p?' class="ye_hover"':'')+'>'+p+'</li>'
};
if (!list){
return;
}
for (var i=0,l=list.length; i<l; i++ ) {
html.push('<li><em>'+list[i].userNick+':</em><span>'+list[i].content+'</span></li>')
}
D.get('J_MsgList').innerHTML = html.join('');

prevShrink = page.currentPage>4 ? true : false;
nextShrink = page.currentPage < page.pageTotal-3 ? true : false;
startP = Math.max(parseInt(page.currentPage)-2,2);
endP = Math.min(parseInt(page.currentPage)+2,page.pageTotal-1);
html=[writepage(1)];
if (prevShrink){
html.push('<li class="ye_dian">...</li>');
}
if (startP<=endP){
for (var i=startP; i<=endP; i++) {
html.push(writepage(i));
}
}
if (nextShrink){
html.push('<li class="ye_dian">...</li>');
}
if (page.pageTotal > 1){
html.push(writepage(page.pageTotal));
}
D.get('J_MsgPage').innerHTML = html.join('');
},
changeList : function(type){
var tar = typeof type === 'string' ? type : this.id;
TB.ACT.Msg.currentPage = 1;
TB.ACT.Msg.currentList = tar === 'J_AllMsg'?'all':'my';
D.get('J_AllMsg').className = tar === 'J_AllMsg'?'type_hover':'type_unhover';
D.get('J_MyMsg').className = tar === 'J_MyMsg'?'type_hover':'type_unhover';
TB.ACT.Msg.getList();
},
init:function(){
E.on(['J_AllMsg','J_MyMsg'],'click',this.changeList);
E.on('J_MsgPage','click',function(ev){
var target = E.getTarget(ev);
if (D.hasClass(target,'ye_dian') || target.tagName.toLowerCase()!=='li'){
return;
}
TB.ACT.Msg.currentPage = parseInt(target.innerHTML) || 1;
TB.ACT.Msg.getList();
});
E.on('J_AddMsg','submit',function(ev){
E.stopEvent(ev);
var msg =this.content.value.trim();
if (msg.length >70){
alert('最多只能填写70个字');
return;
}else if (msg == '' || msg == '提交你的环保态度'){
alert('不能为空');
return;
}
var url = TB.ACT.API.addMessage+'&content='+msg;
Y.Get.script(url,{
onSuccess:function(){
if (typeof addMessage === 'undefined'){
return;
}
if (addMessage.success === 'true'){
TB.ACT.Msg.changeList('J_MyMsg');
            D.get('J_MsgContent').value='';
}
},
                                        charset:'GBK'
})
});
TB.widget.InputHint.decorate('J_MsgContent',{
hintMessage: '提交你的环保态度',
hintClass: 'blur'
});
TB.ACT.Msg.getList();
}
}
E.onDOMReady(function(){
try{
tolookww();
fixlife();
shopbet();
var lookvr = document.getElementById("lookvr");
lookvr.onclick=function(){toshowvr();}
                        plantScBeg();
}catch(e){} E.on(D.getElementsByClassName('J_shareClose'),'click',function(ev){
E.stopEvent(ev);
this.parentNode.style.display='none';
})

TB.widget.SimplePopup.decorate('J_Share','J_ShareBox',{
eventType:'click',
position:'bottom',
offset:[-100,-170],
onShow:function(){
if (!this.popup.isFull){
this.popup.innerHTML = '<iframe src="' + this.trigger.href + '" width="403" height="310" frameborder="0" scrolling="no"></iframe><a href="" title="" class="close J_shareClose"></a>';
E.on(D.getElementsByClassName('J_shareClose'),'click',function(ev){
E.stopEvent(ev);
this.parentNode.style.display='none';
});
this.popup.isFull = true;
}
}
});
TB.ACT.Msg.init();
Y.Get.script(TB.ACT.API.getCounts,{
onSuccess:function(){
if (typeof counts === 'undefined'){
return;
}
if (counts.success === 'true'){
TB.ACT.Cache.userCount = counts.userCount;
TB.ACT.Cache.treeCount = counts.treeCount;
D.get('J_JoinCount').innerHTML = TB.ACT.Cache.userCount;
D.get('J_JoinCount2').innerHTML = TB.ACT.Cache.userCount;
                                        D.get('J_JoinCount3').innerHTML = TB.ACT.Cache.userCount;
//D.get('J_Planter').innerHTML = TB.ACT.Cache.userCount;
D.get('J_PlantNum').innerHTML = TB.ACT.Cache.treeCount;
}
},
                         charset:'GBK'
});

Y.Get.script(TB.ACT.API.getUser,{
onSuccess:function(){
if (typeof currentUser === 'undefined'){
return;
}
if (currentUser.success === 'false' || currentUser.hasLogin === 'false'){
                                             D.setStyle('J_UnLogin','display','block');
}else if (currentUser.hasLogin === 'true' && currentUser.hasJoin === 'false'){
D.setStyle('J_UnJoin','display','block');
function joindt(){
Y.Get.script(TB.ACT.API.addUser,{
onSuccess:function(){
if (typeof addUserAction === 'undefined'){
return;
}
if (addUserAction.success === 'true'){
D.setStyle('J_UnJoin','display','none');
D.get('J_UserId').innerHTML = addUserAction.userNick;
D.get('J_Points').innerHTML = addUserAction.lowPoint;
D.setStyle('J_Joined','display','block');
}
},
charset:'GBK'
})
}
if (location.search.indexOf('gotojoin=1')!==-1){
joindt();
}
E.on('J_JoinBtn','click',function(ev){
E.stopEvent(ev);
joindt();
}) }else if (currentUser.hasLogin === 'true' && currentUser.hasJoin === 'true'){
D.get('J_UserId').innerHTML = currentUser.userNick;
D.get('J_Points').innerHTML = currentUser.lowPoint;
D.setStyle('J_Joined','display','block');
}
if(currentUser.hasLogin === 'true'){
TB.ACT.Cache.hasLogin = true;
}
TB.ACT.LogAction.fire();
},
                        charset:'GBK'
}); Y.Get.script(TB.ACT.API.getPlantTreesList,{
onSuccess:function(){
if (typeof plantTreeList === 'undefined'){
return;
}
if (plantTreeList.success === 'true'){
var list = [];
for (var i = 0, l = plantTreeList.list.length; i<l; i++ ) {
var one = plantTreeList.list[i];
list.push('<li><span class="tree_name">'+one.userNick+'</span><span>植树'+one.plantTrees+'棵</span></li>');
}
D.get('J_PlantRank').innerHTML = list.join('');
}
},
                        charset:'GBK'
});

E.on('J_AddFav','click',AddFavorite);

})
})();这样写有什么好处?解释下函数这样写的意义?

解决方案 »

  1.   

    看一下下面的几行代码,你就可以知道他是什么了:
    function a(){}var a = function(){}执行 a 函数:
    a()用代数法 a = function(){}
    那么 a() 就应该等同于 function(){}()再加一个括号 (function(){})()这种写法一般称之为“闭包”,可以实现强语言里的 namespace or package
      

  2.   


    代码运行到
    var result = (function(x){   
      if(x <=1) return 1;   
      return x* arguments.callee(x-1);   
    })(3);
    这个的时候就会运行这个函数,这个函数传递一个参数3,也就是function(x) 即x=3;
    x是形参,3是实参。
    result是接收返回值
      

  3.   

    argument.callee(x-1)调用当前函数
    function (){}()  为闭包函数,立即执行,不用调用了