JavaScript闭包有什么作用?

经常看到闭包这个词,尤其是一些面试题,因为一知半解的面试官很喜欢问。但是我更加关心的是闭包到底有什么作用?好处或是劣势

阅读 3.6k
5 个回答

感谢各位的回答,经过对大家回答的研究,加上我自己查阅了一些资料,对这个问题做了一个总结 写在这里了 JavaScript闭包

闭包正经的教程在这里:https://developer.mozilla.org...
简单来说,闭包就是一个函数及其运行要素的小集合。如果没有闭包,那么函数和执行要素不关联,那么函数运行只能使用形参

function makeFunc() {
  var name = 'Mozilla';
  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();
myFunc();

就只能写成

function makeFunc() {
  function displayName(name) {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();
myFunc('Mozilla');

高阶函数就没法存在了,函数编程的优势全都没了

还有一种高频出镜的面试题涉及的概念是——防抖和节流。
你搜一搜防抖和节流,我可以说前十页的内容百分之百都是用的函数式写法,而不是天生为状态而生的面向对象写法。
函数式写法,再加上防抖和节流需要状态,此时“闭包”就难免。否则就得用全局变量——这是不能入面试官法眼的,好歹你用个类包装也行。
这就是对闭包特性的最广泛的利用方式了。

还可以参考本人在本站写的另一篇让人越看越乱、但在本人眼中是真正懂得闭包特性的人才看得懂的、可以噎死许多半桶水的博客作者的回答

闭包的作用:保存(阻止垃圾回收) / 保护(私有化变量)

作用多了,我只能收如果没有闭包的话JavaScript直接报废

推荐问题
宣传栏