// 闭包就是内部函数能够读取外部函数中声明的所有变量的函数
// 内部函数作为外部函数的返回值返回
// 好处
// 可以读取函数内部的变量
// 将变量始终保持在内存中 obj没有被回收一直在占内存中
// 可以封装对象的私有属性和私有方法
// 坏处
// 比较耗费内存、使用不当会造成内存溢出的问题
// 具体应用实例 参考 https://www.jb51.net/article/203104.htm
var a = function () {
const obj = {
a: '小李',
b: '小胡'
}
function b() {
console.log(obj)
return obj
}
return b
}
const func = a() //得到a函数内部返回的函数b
func() //调用函数
//console.log(obj) // Uncaught ReferenceError: obj is not defined
function fn() {
var name = "hello";
return function callback() {
return name;
}
}
var fn1 = fn()//执行函数将返回值(callback函数)赋值给fn1,
function fn2(f) {
//将函数作为参数传入
console.log(f());//执行函数,并输出
}
fn2(fn1)//执行输出fn2
// 每秒执行1次,分别输出1-10
// for(var i=1;i<=10;i++){
// (function(j){
// //j来接收
// setTimeout(function(){
// console.log(j);
// },j*1000);
// })(i)//i作为实参传入
// }
for(var i=1;i<=10;i++){
var func1 = function(j){
return setTimeout(function(){
console.log(j);
},j*1000);
}
func1(i)
}
console