如 例
var a = function() {
var i = 1;
var b = function() {
i = i+1;
};
};
闭包的使用场景例如递归
应该return b出去把
re 不re, 看业务需求
或者需要保存内部变量的就是闭包的使用场景了
外部不一定要用
保存内部变量实现缓存
保存内部变量的就是闭包的使用场景
function picLinkInit(parentClassName, imgW, imgH, childClassObjs) { var $match = $(parentClassName); var mWidth = Math.floor($match.width()); var mHeight = computeHeight(mWidth, imgW, imgH); $match.css({ "width": mWidth, "height": mHeight }); for (var i = 0; i < childClassObjs.length; i++) { var childClassObj = childClassObjs[i]; $(childClassObj.cName).css({ "width": Math.floor(mWidth * childClassObj.ratioMoleculeW / childClassObj.ratioDenominatorW), // "background": "rgba(9,200,200,0.5)", "height": Math.floor(mHeight * childClassObj.ratioMoleculeH / childClassObj.ratioDenominatorH) }); /* if (childClassObj.url) { $(childClassObj.cName).click(function () { window.location.href =childClassObj.url; }); }*/ (function (i) { //闭包 if ( childClassObjs[i].url) { $( childClassObjs[i].cName).click(function () { window.location.href = childClassObjs[i].url; }); } })(i); } }
闭包表现:js没有块级元素,数组记录的是最后一个的 。跟作用域等有关。
封装成内部函数,把i传人进内部函数,这样外部函数不会调用到内部函数的变量。
(function (i) { if ( childClassObjs[i].url) { $( childClassObjs[i].cName).click(function () { window.location.href = childClassObjs[i].url; }); } })(i);