闭包JS

如 
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);
原文地址:https://www.cnblogs.com/zyjzz/p/6561919.html