闭包理解讨论

101 阅读1分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

前言

闭包是什么,闭包怎么用?看了很多相关文章虽然看懂了其中的逻辑,但是在日常开发中还是没理解什么场景下改使用闭包。

mdn实用介绍

size在父函数执行完毕变量被销毁之前,size会被打成闭包传到子函数

function makeSizer(size) {
  return function() {
    document.body.style.fontSize = size + 'px';
  };
}

var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);


document.getElementById('size-12').onclick = size12;
document.getElementById('size-14').onclick = size14;
document.getElementById('size-16').onclick = size16;

日常写法

按开发逻辑通常以上功能我会写成这种方式,那么它有什么弊端的呢?那些场景需要用到闭包。

function makeSizer(size) {
  //return function() {
    document.body.style.fontSize = size + 'px';
  //};
}

//var size12 = makeSizer(12);
//var size14 = makeSizer(14);
//var size16 = makeSizer(16);


document.getElementById('size-12').onclick = makeSizer(12);
document.getElementById('size-14').onclick = makeSizer(14);
document.getElementById('size-16').onclick = makeSizer(16);

求助大佬帮忙解答该问题,感恩。