闭包


/**
 * bar()是定义在 foo() 里的内部函数,仅在该函数体内可用。
 * bar()内没有自己的局部变量,然而它可以访问到外部函数的变量,
 * bar() 可以使用父函数 foo() 中声明的变量 name
 */
function foo() {
    var name = 1;        //name 是一个被 foo 创建的局部变量
    function bar(){      //bar() 是内部函数,一个闭包
       console.log(name); //使用了父函数中声明的变量
    }
    bar()
}

// foo()

function F() {
    var f = []
    for (var i = 0; i <= 2; i++) {
        console.log(i);
        f[i] = function() {
            console.log(i);
        }
    }
    return f
}

var f = new F()

for (var i = 0; i < f.length; i++) {
   f[i]();
}

// 3
// 3
// 3


  Reprint please specify: 云深不知处

 Previous
克隆/** * 浅克隆对象只会被克隆最外部的一层, * 至于更深层的对象,则依然是通过引用指向同一块堆内存. * @param {*} o */ function shallow(o) { const obj = {}
2019-02-17 卓文智
Next 
强制类型转换 强制类型转换
JavaScript中的强制类型转换总是返回标量值,如数字,字符串,布尔值,不会返回对象和函数。 也可以这样子类区分:类型转换发生在静态类型转换的编译阶段,而强制类型转换发生在动态语言的运行时。 然而在JavaScript中统称为强制类型转
2019-02-17
  TOC