function fun() { var n = 9; // js 中强行给一个未声明的变量赋值, // 程序不会报错 // 并且会自动在全局创建此变量 add = function() { n++; }; return function() { console.log(n); }; }; // 把 fun() 执行的结果赋值给 fn 变量 var fn = fun(); // 此处调用的是全局的 add 函数, // 因为全局的 add 函数作用域链引用着 fun 函数作用域对象 // 所以修改的是 fun 里面变量的值 add(); fn(); // 10 // 把 fun() 执行的结果赋值给 fn2 变量 // 注意:这里的 fn2 所引用的是 fun() 执行后的地址 // 所以 fn 和 fn2 变量使用的地址是不同,结果也不相同 var fn2 = fun(); fn2(); // 9 add(); add(); fn2(); // 11 fn(); // 10 add(); fn(); // 10
闭包 -- 笔试 - 11
关注
打赏