在找工作面试的时候, 面试官们跟商量好的一样都会向你问一种问题的, 那就是闭包这个问题.
通常情况下会这样问:
什么是闭包?
闭包有什么特性?
闭包对页面有什么影响?
闭包的优缺点是什么?
...............
那现在我们就来盘一盘这个闭包!
什么是闭包:
闭包就是利用作用域的嵌套, 将原来的局部变量, 进化成自由私有变量的环境.
闭包的原理:
利用作用域的嵌套, 触发计算机的垃圾回收机制, 将原来要删除的变量暂时保存起来, 可继续使用.
垃圾回收机制:
将要删除的数据, 先暂时存放在一个临时空间内, 不立即删除, 如果需要再次使用, 可以直接找到该数据继续使用, 如没有利用价值再去清除掉.
闭包的应用:
1. 循环中的异步:
- var ali = document.querySelectorAll("li");
- // 第一种
- for(var i=0;i<ali.length;i++){
- (function(index){
- ali[index].onclick = function(){
- console.log(index);
- }
- })(i)
- }
- // 第二种
- for(var i=0;i<ali.length;i++){
- ali[i].onclick = (function(index){
- return function(){
- console.log(index);
- }
- })(i);
- }
- // 第三种
- for(let i=0;i<ali.length;i++){
- ali[i].onclick = function(){
- console.log(i);
- }
- }
2. 计时器的回调函数
- setTieout(fn("hello"),5000);
- function fn(str){
- return function(){
- console.log(str);
- }
- }
3. 在外部重复操作函数内部的变量
- function fn(){
- var a =10;
- return function(){
- console.log(a++)
- }
- }
- var f = fn();
- f();
- f();
- f();
闭包的特点:
闭包就是将作用域内部和外部连接起来的桥梁
优点:
1. 可以将要删除的数据保存起来, 继续使用, 很方便
2. 可以在函数外部操作内部的数据
缺点:
1. 因为要删除的数据, 没有被删除而继续存起来, 那么会占内存, 好性能.
2. 在外部有可能改变内部的数据.
posted on 2019-09-29 19:39 - 沐森 阅读 (...) 评论 (...) 编辑 收藏
来源: https://www.cnblogs.com/musen123/p/11609642.html