function count() {
    var arr = [];
    for (var i=1; i<=3; i++) {
        arr.push((function (n) {
            return function () {
                return n * n;
            }
        })(i));
    }
    return arr;
}在看闭包,看不哟 (i) 这句是啥子意思哟大佬能解释下这语句吗

解决方案 »

  1.   

    你的代码可以拆开,这么看function count() {
        var arr = [];
        for (var i=1; i<=3; i++) {
            arr.push( square(i) );  // 将square的执行结果存入arr
        }
        return arr;
    }function square(n){
        return function () {  // 返回一个匿名函数,其中n的值为每次传入的i的值
            return n * n;
        }
    }这个代码是考你对闭包的理解
      

  2.   

    (function (n) {......})(i) 是创建一个匿名函数并立即执行
    i是执行时传递的实参,n是函数内接收参数的形参。等同于下面的形式
        for (var i=1; i<=3; i++) {
            var f = function (n) {
                return function () {
                    return n * n;
                }
            };
            var h = f(i);
            arr.push(h);
        }