通过本文主要向大家介绍了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="

