用了这么久js,其实对js都是一知半解,至今不知道闭包函数是什么,看了几篇关于闭包的文章,大概理解下来是这样,不知道正确与否,欢迎指正:

一个函数内部包含了另一个函数,内部函数如果称为子函数,外部函数称为父函数,在父函数外部调用子函数的这个子函数就被称为闭包函数。它可以访问父函数的局部变量,也可以访问全局变量。但是闭包函数不管有没有用到父函数的局部变量,都会有父函数的局部变量存在内存中,所以闭包函数比较消耗内存。

下面是别人的一个示例:

1 var Circle={ 
2   "PI":3.14159, 
3   "area":function(r){ 
4     return this.PI * r * r; 
5   } 
6 }; 
7 alert( Circle.area(1.0) );//3.14159
Circle.area(1.0)就是一个闭包函数。
闭包函数的使用注意事项:
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值
其他小case:
1.函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量。
2.js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升。
1 console.log(f1); // function f1() {}  
2 console.log(f2); // undefined 
3 function f1() {}
4 var f2 = function() {}

博客参考出处:https://www.jb51.net/article/136223.htm