js闭包好处:
1.首先避免了全局变量的污染。诸如这个一般计数器的例子,如果不使用闭包直接将变量暴露在外面。如果一不小心就可能使其改变。使用闭包后的程序变量外界直接是拿不到的只能通过函数调用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<p>局部变量计数。</p>
<button type="button" onclick="myFunction()">计数!</button>
<p id="demo">0</p>
<script>
var counter = 0;
var add = function () {
return counter++;
};
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
console.log(counter);
</script>
</body>
</html>
使用闭包后的程序:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<p>局部变量计数。</p>
<button type="button" onclick="myFunction()">计数!</button>
<p id="demo">0</p>
<script>
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
console.log(counter);//undefined
</script>
</body>
</html>
2.这个变量可以长期存在,对计数器这样的场景比较实用
缺点:就是因为这个变量的一直存在才导致了内存开销的变大,这个变量一直不能释放,内存就会一直占据,会降低浏览器的性能。