通过本文主要向大家介绍了js闭包原理,js闭包是什么,js闭包函数,js闭包,js闭包实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
创建一个js文件,名为testClosure.js:
(function () { function a() { alert('i am a'); } outFunc = function () { a(); } })();</div>
这里不论写多少个function,a b c d ...外面都调用不到,包括这里面var定义的变量也都调用不到,那么你在里面尽情的写,就不用担心这些函数名变量名跟外界冲突;
只需要暴露一个outFunc这个函数供外界调用。这个函数呢没有用var定义,就变成一个全局变量,外界就可以调用的到,利用这一点,让这个函数变成匿名函数和外界沟通的桥梁。
再利用js面向对象的方法,就可以封装出非常好用的组件。
示例一:不需要继承的js组件
(function() { var arrAuthItem = new Array(); var isInited = false; var syncTableObj=findObj("sync-table-id",document); var newTR=null; var checkBox=null; var authTable = null; var selfPicUrl=null; var selfItem=null; var isAuthItemEnabled=false; var isSelfItemEnabled=false; function getAuthShopCurrent() { return $("#"+globalSyncVars.serverComClientId.AuthShopListId).val(); } function getSyncFieldCurrent() { return $("#"+globalSyncVars.serverComClientId.SyncFieldListId).val(); } function setTitle() { $("#sync-table-title-id").html("从“"+getAuthShopCurrent()+"”同步"); } function getNumIidFrom(numIidTo) { var curRowData = jQuery("#listItemDefine").jqGrid('getRowData', numIidTo); return curRowData.NumIidFrom; } function insertRows() { deleteAll(); for(var i=0;i<arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""].length;i++) { newTR=syncTableObj.insertRow(syncTableObj.rows.length); // 0 checkbox checkBox=newTR.insertCell(0); // 1 auth table authTable=newTR.insertCell(1); // 2 self picurl selfPicUrl=newTR.insertCell(2); // 3 self item selfItem=newTR.insertCell(3); isSelfItemEnabled=setterSelfItem(i); isAuthItemEnabled=setterAuthItem(i); if(isAuthItemEnabled&&isSelfItemEnabled) setterEnableStatus(true,i); else setterEnableStatus(false,i); } } function setterAuthItem(i) { var isEnabled=false; if (!stringToBoolean(arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]["HasSameItem"])) { authTable.innerHTML='<table class="inner-table-class inner-table-from-class"><tr><td class="inner-table-td-radio-class"></td><td class="inner-table-td-class main-img-class"></td><td class="inner-table-td-class" style="padding-top:21px;padding-bottom:21px;">此宝贝没有对应的授权宝贝</td><td class="inner-table-td-class sync-img-class"><span class="icon-no-class"/></td></tr></table>'; return isEnabled; } var arr = arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]["ListItemFrom"]; var strHead = '<table class="inner-table-class inner-table-from-class">'; var strTr = ""; var isBinded = false; // 如果已经绑定了,标记一下,是否已经授权过也标记 var numIid = getNumIidFrom(arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]["NumIidTo"]); if(numIid!="none") { for(var j=0;j<arr.length;j++) { if(arr[j]["NumIid"]==numIid) { isBinded=true; break; } } } for(var p=0;p<arr.length;p++) { var isSharedFrom = stringToBoolean(arr[p]["IsFromItemHasShareFrom"]); var isSharedTo = stringToBoolean(arr[p]["IsFromItemHasShareTo"]); var picUrl='<a href="http://item.taobao.com/item.htm?id=' + arr[p][" rel="external nofollow" NumIid"] + '" target="_blank"><img class="icon" style="padding:0px;width:60px" src="' + arr[p]["PicUrl"] + '_sum.jpg" title="' + arr[p]["Title"] + '" /></a>'; if(getEnabledStatus(isBinded,!isSharedTo,isSelfItemEnabled)) isEnabled = true; strTr+='<tr><td class="inner-table-td-radio-class">'+getRadioCode(isBinded,!isSharedTo,isSelfItemEnabled,i,arr.length)+'</td><td class="inner-table-td-class main-img-class">'+picUrl+'</td><td class="inner-table-td-class">'+getAuthItemCode(arr[p],isSharedFrom,isSharedTo,i)+'</td><td class="inner-table-td-class sync-img-class">'+getEnabledCode(isBinded,!isSharedTo,isSelfItemEnabled,arr[p],numIid)+'</td></tr>'; } authTable.innerHTML = strHead+strTr+'</table>'; return isEnabled; } // 返回auth宝贝详情html代码 function getAuthItemCode(obj,isSharedFrom,isSharedTo,i) { var labelStr = ""; if(isSharedFrom) labelStr = '<span style="color:red;">【源】</span>'; if(isSharedTo) labelStr = '<span style="color:red;">【受】</span>'; return '<span style="line-height:20px;" columnName="NumIid">'+labelStr+'ID:' + obj["NumIid"] + '</span>' + '<span style="padding-left:14px;" columnName="OuterId">商家编码:' + obj["OuterId"] + '</span>' + '<span style="padding-left:14px;color:'+getPriceColor(obj["Price"],i)+'" columnName="Price">价格:' + obj["Price"] + '</span>' + '<br><span style="line-height:20px;" columnName="Title">' + obj["Title"] + '</span>'; } // 返回self宝贝详情html代码 function getSelfItemCode(obj) { var labelStr = ""; if(stringToBoolean(obj["IsToItemHasShareFrom"])) labelStr = '<span style="color:red;">【源】</span>'; if(stringToBoolean(obj["IsToItemHasShareTo"])) labelStr = '<span style="color:red;">【受】</span>'; return '<span class="sync-table-td-class"><span style="line-height:20px;" columnName="NumIid">'+labelStr+'ID:' + obj["NumIidTo"] + '</span>' + '<span style="padding-left:14px;" columnName="OuterId">商家编码:' + obj["OuterIdTo"] + '</span>' + '<span style="padding-left:14px;color:black;" columnName="Price">价格:' + obj["PriceTo"] + '</span></span>' + '<br><span class="sync-table-td-class" style="line-height:20px;" columnName="Title">' + obj["TitleTo"] + '</span>'; } // 返回绑定关系图标的html代码 function getEnabledCode(isBinded,isAuthEnabled,isSelfEnabled,obj,numIid) { if(isBinded) { // 如果是绑定状态,还要看当前item是否为绑定的item // 在这种情况下,判断是否可绑定,不需要用到selfItem if(obj["NumIid"]==numIid) return '<span class="icon-bind-class"/>'; else { if(stringToBoolean(obj["IsFromItemHasShareTo"])) return '<span class="icon-no-class"/>'; else return '<span class="icon-ok-class"/>'; } }else { if(isAuthEnabled&&isSelfEnabled) return '<span class="icon-ok-class"/>'; else return '<span class="icon-no-class"/>'; } } // 是否可以绑定 function getEnabledStatus(isBinded,isAuthEnabled,isSelfEnabled) { if(isBinded) return false; if(isAuthEnabled&&isSelfEnabled) { return true; } else { return false; } } // 返回radio的html代码 /** * isBinded 是否已经绑定 * isAuthEnabled auth是否可同步 * isSelfEnabled self是否可同步 * 当前rows的index * 当前auth-list的长度(如果是一对一,当然不需要radio) */ function getRadioCode(isBinded,isAuthEnabled,isSelfEnabled,i,length) { if(isBinded) return ""; if(length==1) return ""; if(isAuthEnabled==false||isSelfEnabled==false) return ""; return '<input type="radio" name="radio'+i+'">'; } function setterSelfItem(i) { var isEnabled=true; var picUrl='<a href="http://item.taobao.com/item.htm?id=' + arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+" rel="external nofollow" "][i]["NumIidTo"] + '" target="_blank"><img class="